当前位置: 首页 > news >正文

Extjs 学习总结-代理

代理(proxy)是用来加载和存取Model 数据的。开发中一般配合Store完成工作,不会直接操作代理。
代理分为两大类:

客户端代理
服务器代理

客户端代理主要完成与浏览器本地存储数据相关的工作。服务器端代理则是通过发送请求,从服务器获取数据。

根据各自获取数据的方式,客户端代理和服务器代理又分为以下几种:

  1. 客户端代理:

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

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

LocalStorageProxy

要使用代理,我们首先要有一个数据模型类:

//一个简单的Person类
Ext.define('Person', {
    extend: 'Ext.data.Model',
    fields: ['name', 'age']
});

有了Model,我们还需要一个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: 'Person'
});

有了代理,我们需要将代理和Store联系起来:

personStore.setProxy(personProxy);

其实,在我们实际应用中,可以在Model 或 Store 中直接使用proxy 选项,我们在后面的示例中将会看到具体的用法。

有了Store 和 Proxy,我们先保存一条数据到LocalStorage中:

personStore.add({ name: 'www.qeefee.com', age: 1 });
personStore.add({ name: 'qf', age: 26 });
personStore.add({ name: 'qifei', age: 26 });
personStore.sync();

要查看保存的数据,我们需要先将数据从LocalStorage中加载到Store中,然后对Store 进行遍历:

personStore.load();
var msg = [];
personStore.each(function (person) {
    msg.push(person.get('name') + ' ' + person.get('age'));
});

Ext.MessageBox.alert('提示', msg.join('<br />'));

使用load方法会将所有的数据都加载到Store中,如果我们需要进行查询指定的数据,就要用到filter方法了。

personStore.filter("name", /\.com$/);

更新操作

//得到第一个person对象
var person = personStore.first();
//修改名字字段
person.set('name', 'qeefee.com');
//保存到本地
personStore.sync();

删除操作

//得到第一个person对象
var person = personStore.first();
//移除
personStore.remove(person);
//保存
personStore.sync();

SessionStorageProxy

SessionStorageProxy 的用法与LocalStorageProxy 的用法基本一致,我们这次在Model中添加proxy 的配置项:

//定义数据模型
Ext.define('Person', {
    extend: 'Ext.data.Model',
    fields: ['name', 'age'],
    proxy: {
        type: 'sessionstorage',
        id: 'myProxyKey'
    }
});

在Model中加入代理配置以后,我们就不需要单独的定义代理对象了,可以直接使用Store来对其进行操作:

//定义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();

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

转载于:https://www.cnblogs.com/damonzh/p/5497327.html

相关文章:

  • consul笔记
  • Java设计模式图文详解
  • swift-分支
  • 2016/05/19 thinkphp 3.2.2 文件上传
  • 如何升级CentOS 6.5下的MySQL
  • Linux系统命令查询软件包
  • 第十二周学习进度
  • ios实用wifi分析仪——AirPort
  • 主线程中创建不同的handler实例,接收消息会不会冲突
  • HDOJ-1412(set)
  • [PHP源码阅读]empty和isset函数
  • Codeforces Round #329 div2
  • sublime text 2 配置php调试环境
  • Hibernate java.lang.NoSuchFieldError: INSTANCE
  • mysql学习笔记4---mysql 复制---源代码
  • 分享一款快速APP功能测试工具
  • 《深入 React 技术栈》
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Centos6.8 使用rpm安装mysql5.7
  • JavaScript函数式编程(一)
  • JS基础之数据类型、对象、原型、原型链、继承
  • Logstash 参考指南(目录)
  • October CMS - 快速入门 9 Images And Galleries
  • SAP云平台里Global Account和Sub Account的关系
  • 阿里云应用高可用服务公测发布
  • 创建一个Struts2项目maven 方式
  • 浮现式设计
  • 看域名解析域名安全对SEO的影响
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 网页视频流m3u8/ts视频下载
  • 为什么要用IPython/Jupyter?
  • 怎么将电脑中的声音录制成WAV格式
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • scrapy中间件源码分析及常用中间件大全
  • Semaphore
  • Spring Batch JSON 支持
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​linux启动进程的方式
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #stm32整理(一)flash读写
  • $ git push -u origin master 推送到远程库出错
  • (办公)springboot配置aop处理请求.
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转) 深度模型优化性能 调参
  • (转)Unity3DUnity3D在android下调试
  • .NET大文件上传知识整理
  • .NET简谈设计模式之(单件模式)
  • .Net中的集合
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限