zoukankan      html  css  js  c++  java
  • ExtJS客户端代理

    代理(proxy)分为两大类:客户端代理和服务器端代理。客户端代理主要完成与浏览器本地存取数据相关的工作,服务器端代理则是通过发送请求,从服务器端获取数据。根据各自获取数据的方式,客户端代理和服务器端代理又可以分为一下几种:

    客户端代理:

    • LocalStorageProxy:将数据存储在localStorage中,此种方式可以持久的将数据存储在客户端。
    • SessionStorageProxy:将数据存储在sessionStorage中,此种方式只在当前会话中生效,当关闭浏览器以后,数据也会随之丢失。
    • MemoryProxy:将数据存储在内存中,此种方式只在当前页面有效,且如果刷新页面,数据将丢失。

    服务器端代理:

    • Ajax:在当前域中发送请求
    • JsonP:跨域的请求
    • Rest:与服务器进行RESTful(GET/PUT/POST/DELETE)交互
    • Direct:使用  Ext.direct.Manager 发送请求

    SessionStorageProxy 的用法与LocalStorageProxy 的用法基本一致。例如以下代码演示LocalStorageProxy 的用法:

    // 首先,我们定义一个简单的Person类
    Ext.define('Person', {
        extend: 'Ext.data.Model',
        fields: ['name', 'age']
    });
    
    // 紧接着,我们还需要一个Store。我们可以把 Store 理解为数据仓库,它对应数据库中的表,而Store 包含的 Record 则是数据表中的每一行记录。实际使用中我们更多的对store进行操作。
    var personStore = Ext.create("Ext.data.Store", {
        model: 'Person'
    });
    
    // 接下来就到我们代理出场的时候了。我们需要创建一个LocalStorageProxy:
    var personProxy = new Ext.data.proxy.LocalStorage({
        id: 'Person_LocalStorage',     // 建立关联后,针对model,和不同的proxy区分开
        model: 'Person'
    });
    
    // 建立代理与 Store 的联系
    personStore.setProxy(personProxy);
    
    // 此时我们可以针对store进行增删改查(CRUD)的操作了
    personStore.add({ name: 'www.qeefee.com', age: 1 });
    personStore.add({ name: 'qf', age: 26 });
    personStore.add({ name: 'qifei', age: 26 });
    personStore.sync();            // 保存Search到本地数据库
    

      此外,我们也可以在声明数据模型的时候,同时声明代理:

    // 定义数据模型,在Model中加入代理配置以后,我们就不需要单独的定义代理对象了,可以直接使用Store来对其进行操作
    Ext.define('Person', {
        extend: 'Ext.data.Model',
        fields: ['name', 'age'],
        proxy: {
            type: 'sessionstorage',
            id: 'myProxyKey'
        }
    });
    
    //定义Store
    var personStore = Ext.create("Ext.data.Store", {
        model: 'Person'
    });
    
    //添加数据
    personStore.add({ name: 'www.qeefee.com', age: 1 });
    personStore.add({ name: 'qf', age: 26 });
    personStore.add({ name: 'qifei', age: 26 });
    personStore.sync();
    

      

    MemoryProxy与SessionStorageProxy 的用法和LocalStorageProxy 的用法相比略有差异。MemoryProxy 是将数据存储在内存中的,它只在当前页生效,如果关闭或刷新页面,所有数据都将丢失。在使用MemoryProxy 的时候,我们需要为Store指定一个数据集(类似于缓存),store 将通过代理对这个数据集进行操作:

    //定义数据模型
    Ext.define('Person', {
        extend: 'Ext.data.Model',
        fields: ['name', 'age']
    });
    var data = {
        Users: [
            { name: 'www.qeefee.com', age: 1 },
            { name: 'qeefee', age: 1 }
        ]
    }
    //定义Store
    var personStore = Ext.create("Ext.data.Store", {
        model: 'Person',
        data: data.Users,
        proxy: {
            type: 'memory'
        }
    });
    

      当personStore 定义的时候,data中预先定义的缓存就会自动的将数据加载到Store中,所以在我们访问数据的时候不需要再调用load方法了:

    //读取数据
    var msg = [];
    personStore.each(function (person) {
        msg.push(person.get('name') + ' ' + person.get('age'));
    });
    Ext.MessageBox.alert('提示', msg.join('<br />'));
    

      和上两个的操作基本一致,我们可以通过下面的代码添加一行新数据:

    personStore.add({ name: 'qifei', age: 26 });
    personStore.sync();
    

      

  • 相关阅读:
    matlab cell
    matlab linux 快捷键设置——有问题还是要解决
    latex 小结
    TOJ 1258 Very Simple Counting
    TOJ 2888 Pearls
    HDU 1248 寒冰王座
    TOJ 3486 Divisibility
    TOJ 3635 过山车
    TOJ 1840 Jack Straws
    HDU 4460 Friend Chains
  • 原文地址:https://www.cnblogs.com/ImaY/p/4602623.html
Copyright © 2011-2022 走看看