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

代理分为两大类:

客户端代理

服务器代理

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

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

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

Extjs 学习总结-代理的更多相关文章

  1. ExtJs学习笔记之学习小结LoginDemo

    ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  2. ExtJs学习之Window

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. extjs 学习笔记(二)

    EXTJS实用开发指南 1. 要使用ExtJS 框架的页面中一般包括下面几句: <link rel="stylesheet" type="text/css" ...

  4. Extjs 学习总结-Ext.define自定义类

    本教程整理了extjs的一些基本概念及其使用,包括自定义类(Ext.define).数据模型.代理等.本节介绍使用Ext.define自定义类 使用Ext.define自定义类 1. 首先看看js中自 ...

  5. Extjs 学习笔记1

    学习笔记 目   录 1 ExtJs 4 1.1 常见错误处理 4 1.1.1 多个js文件中有相同的控件,切换时无法正常显示 4 1.1.2 Store的使用方法 4 1.1.3 gridPanel ...

  6. ExtJS学习之路第六步:深入讨论组件Panel用法

    Panel加载页面 var myPanel=Ext.create('Ext.panel.Panel',{ bodyPadding: "15px 10px 0 10px", titl ...

  7. ExtJS学习之路第五步:认识最常见组件Panel

    文档中描述 Panel(面板)是一个容器,它具有特定的功能和结构部件,这使它成为面向应用用户界面的完美基石.面板,继承自Ext.container.Container,能够配置布局以及子组件(Chil ...

  8. ExtJS学习之路第一步:对比jQuery,认识ExtJS

    最近纷杂的事情比较多了,奔波ing!所以,Node.js 和Canvas动画系列都停止了,等稳定了再重拾书本继续学习!因为某种原因最近在看ExtJS,分享下学习的心得,希望对同道中人有所帮助. 第一用 ...

  9. EXTJS学习笔记

    由于公司统一决策,决定使用EXTJS作为前台的开发UI框架,所以从今天开始学习EXTJS,对学习过程中遇到的问题做记录. 首先第一个问题:为什么要用ExtJS作为公司开发基础架构?   推荐一篇文章: ...

随机推荐

  1. Android 分享到微信

    /** * 分享信息到朋友 * * @param file,假如图片的路径为path,那么file = new File(path); */ private void shareToFriend(Fi ...

  2. JavaScript的写类方式(6)

    时间到了2015年6月18日,ES6正式发布了,到了ES6,前面的各种模拟类写法都可以丢掉了,它带来了关键字 class,extends,super. ES6的写类方式 // 定义类 Person c ...

  3. 关于stm32定时器的理解

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 表面意思是输出控制极性为高,但是意思是定时器输入0,不反相,输出0: 输出控制极性为 ...

  4. 【读书笔记《Bootstrap 实战》】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

  5. java之多线程 二

    线程的生命周期: 当线程被创建并被启动时,它既不是一启动就进入了执行状态,在线程的生命周期中,它要经过new(新建),就绪(Runnable),运行(Running),阻塞(Blocked),dead ...

  6. Intellij Idea中定制getter setter的模板

    Alt + Ins, 调出快捷菜单后选择 Getter and Setter, 在对话框里, 选择对应的template, 右侧点开后, 可以新建自己的模板并编辑 将getter和setter都生成到 ...

  7. button

  8. c#导出bugfree3.0的数据到禅道

    环境:vs2012MVC4项目,mysql server5.6 准备:bugfree的数据库导出后.sql文件,禅道7.1的数据库文件 基本过程:这是个笨办法,也没有优化过代码,导入数据时候比较慢.禅 ...

  9. ffmpeg.exe dos下怎么用 放在哪里

    系统:windows 7 1.先看dos界面,win7下这里输入cmd, 看路径 2.把下载的ffmpeg.exe复制到这个路径下  3.这就可以用命令了 1.mp4说明这个文件是跟ffmpeg.ex ...

  10. p2p网贷平台设计简析

    以我之前主持开发的一个商业产品:p2p网贷为例进行分析.整个的概况,可以参见:www.huixinp2p.com(目的只会技术交流) 界面可以直接参考前期博客:http://www.cnblogs.c ...