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();
    

      

  • 相关阅读:
    Python运算符及逻辑运算
    Python编码、流程控制、格式化输出
    Docker私有仓库Harbor部署与使用
    react
    理事会
    关于elementui form表单过长,看不到未填项
    js
    vue 父子传值
    养生
    html知识点
  • 原文地址:https://www.cnblogs.com/ImaY/p/4602623.html
Copyright © 2011-2022 走看看