我们先来看看Extjs非常绚丽的Grid,其功能包括显示数据列表,修改、删除,分页,排序等功能。   Grid组件用来显示Store中的数据。Store可以看做是Model实例的集合。Grid仅关心如何显示数据,而Store关心如何通过Proxy来读取和保存数据。

下面进入正题Proxy   考虑到数据可能保存在服务器端,也可能保存在客户端本地,所以Proxy有两个子类Server和Client。  Server用来和服务器端进行数据读取和保存,相应的Client用来在客户端保存和读取数据。  Server主要是利用Ajax技术进行和服务器端交互。而Client则主要借助客户端变量以及html5的localStorage 和 session storage 来存储数据。

下面细致讲解类的封装: Proxy定义了对外统一的访问接口CRUD(Create、Read、Update、Delete)以及持有Model对象、Reader和Writer对象。 其中Model 用来标识出装载和保存数据的类型。 Reader:用来解析服务器端返回的数据。 Writer:格式化向服务器端发送的数据。 此外Proxy还提供了批量发送请求的方法。
Client作为Proxy的子类,定义了清除客户端数据的接口,要求子类实现。 Client的子类有三个 Ext.data.proxy.Memory:简单的使用变量来存储数据,所以页面刷新后数据会丢失。 Ext.data.proxy.LocalStorage :使用html5的localStorage API 来存储数据 Ext.data.proxy.SessionStorage :使用HTML5 session storage 来存储数据 html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage。
sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。
而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。
web storage和cookie的区别 Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。
除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。
但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。

Server 作为Proxy的子类,被设计用来向服务器端发送数据。这个类主要定义了分页、分组排序过滤等默认参数,通过代理模式为CRUD这四个方法提供统一的处理方法doRequest,封装请求数据buildRequest,以及解析服务器返回数据processResponse。

这里我们重点关注Server的buildRequest和processResponse

Server的buildRequest方法,根据请求参数Ext.data.Operation提供的信息构造出Ext.data.Request 对象,其中Request 形如:

{

action: undefined,      params: undefined,       method: 'GET',      url: undefined,

}

Server的processResponse方法,主要是从response对象中解析出所有的Ext.data.Model实例,然后调用Operation的commitRecords方法将服务器端返回的Model更新到客户端缓存的数据上,即更新Store中缓存的数据。

Server的子类有三个 Ext.data.proxy.Ajax         使用Json方式向服务器端发送数据和接收数据 Ext.data.proxy.Direct      通过Ajax使得客户端可以直接调用服务器端的方法。还提供了轮询方式向服务器端发送请求。 Ext.data.proxy.JsonP     可以跨域向服务器端发送请求
上面这三个类最终都是通过调用Connection类的request 方法向服务器端发送Ajax请求。

这里我们重点关注Connection的request 方法
Connection的request 方法主要用来创建XMLHttpRequest对象发送请求信息到服务器端,接收服务器返回数据并执行回调函数。

首先通过getXhrInstance方法屏蔽掉浏览器之间创建XMLHttpRequest的差异。

当服务器返回数据后调用onComplete方法,将.responseText 和responseXML以及服务器返回的状态信息status等包装到response对象中,作为回调函数的参数。如果状态成功就调用success方法,失败就调用failure方法,最后无论成功还是失败都调用callback方法。

extjs Proxy的更多相关文章

  1. Extjs PROXY查询params无法传参,改用extraParams

  2. [EXT JS]"hasMany" association on ExtJS 4.1.1a

    ExtJS uses "hasMany" association to support nested json. However the sencha docs lacks wel ...

  3. ExtJS 4.2 教程-06:服务器代理(proxy)

    转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-6-server-proxy ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 ...

  4. EXTJS之DATA PROXY READER

    这是不依赖于STORE的读取.我测试了很久,原来在新版本的EXTJS里.modelmanager.getmodel之类的不用了. 更改为静态的LOAD办法. <!DOCTYPE html> ...

  5. EXTJS动态改变store的proxy的params

    动态改变store的条件参数.var store = win.down('grid[name=sourceGrid]').getStore(); Ext.apply(store.proxy.extra ...

  6. ExtJS笔记 Proxy

    Proxies are used by Stores to handle the loading and saving of Model data. Usually developers will n ...

  7. ExtJS 4.2 教程-05:客户端代理(proxy)

    转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-5-client-proxy ExtJS 4.2 教程-01:Hello ExtJS ExtJS 4.2 ...

  8. ExtJS 4.2 业务开发(二)数据展示和查询

    本篇开始模拟一个船舶管理系统,提供查询.添加.修改船舶的功能,这里介绍其中的数据展示和查询功能. 目录 1. 数据展示 2. 数据查询 3. 在线演示 1. 数据展示 在这里我们将模拟一个船舶管理系统 ...

  9. ExtJS 4.2 业务开发(三)数据添加和修改

    接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...

随机推荐

  1. Java分布式锁实现详解

    在进行大型网站技术架构设计以及业务实现的过程中,多少都会遇到需要使用分布式锁的情况.那么问题也就接踵而至,哪种分布式锁更适合我们的项目? 下面就这个问题,我做了一些分析: 分布式锁现状: 目前几乎很多 ...

  2. staticmethod、classmethod的使用

    staticmethod 首先要明白两个概念 绑定方法:但凡是定义在类的内部,并且没有被任何装饰器修饰过的方法,就是绑定方法,并且有自动传值功能.类直接调用该方法时,改方法叫做类的函数属性:对象在调用 ...

  3. JPA学习笔记(8)——映射双向一对多关联关系

    双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...

  4. Implement Queue using Stacks(用栈实现队列)

    Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of ...

  5. GIS前端将选中的图形输出为Shapfile文件

    老师让我实现如题的功能,我对着ArcGIS js api找了半天,没有发现该方法接口,找了很多资料,前后问了三个前辈. 第一个前辈说用GP服务,我在ArcMap的工具箱里找到convert to la ...

  6. 不可思议的混合模式 background-blend-mode

    本文接前文:不可思议的混合模式 mix-blend-mode .由于 mix-blend-mode 这个属性的强大,很多应用场景和动效的制作不断完善和被发掘出来,遂另起一文继续介绍一些使用 mix-b ...

  7. rwx读写执行对文件和目录的意义

    文件 目录 r 查看 列出目录内容 w 修改 在目录内新建删除文件 x 执行 可以进入目录 对文件的删除权限是对文件所有目录的写权限 对目录-wx的权限,有写和执行权限,既可以在目录内创建删除文件,可 ...

  8. 【java】正则表达式简单示例

    public class Test { public static void main(String[] args) { String str="135axy"; String r ...

  9. js判断文件类型大小并给出提示

    上传文件是工作中常用的功能,不同的场景对不同的文件类型和文件大小都有不同的要求: <form id="uploadForm" method="post" ...

  10. JAVA Socket编程(二)之TCP通信

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...