我们先来看看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. Centos下抓包

    刚才遇到一个问题,微信配置时token总是失败. 于是抓一下服务器的包.看看是否是数据传输出了问题. 先安装工具 [Shell] 纯文本查看 复制代码 ? 1 yum install -y wires ...

  2. 使用js做创建图片及删除图片 若有什么不对或不完整的地方,请大家提出来,谢谢

    首先我们要在<body>中创建一个按钮<button>来用作点击创建图片,在<button>中写一个点击事件(随便命名), 在创建一个<div>存放图片 ...

  3. 使用css修改radio、checkbox样式

    input[type=radio],input[type=checkbox]  { display: inline-block; vertical-align: middle; width: 20px ...

  4. POJ 1861:Network(最小生成树&amp;&amp;kruskal)

    Network Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 13266   Accepted: 5123   Specia ...

  5. C++技术问题总结-第8篇 STL内存池是怎么实现的

    STL内存池机制,使用双层级配置器.第一级採用malloc.free,第二级视情况採用不同策略. 这样的机制从heap中要空间,能够解决内存碎片问题. 1.内存申请流程图     简要流程图例如以下. ...

  6. 关于python的itertools模块

    这是一个强大的模块 先来看一下它都有什么工具 无穷循环器 迭代器         参数         结果                                               ...

  7. redis远程连接问题(安全模式问题)

    我在windows上远程连接linux上的redis(我虚拟机上的)遇到了问题,我是在windows上php代码中的调用redis接口来远程连接的,代码中ping()的时候报错. 服务器端我确定了ip ...

  8. 将java项目打包成docker镜像

    简介:将jar打包成镜像好说,毕竟jar包长的都是一样的,但是我们只是写了一个普通的java项目,我也不方便封装成jar包什么的,但是我们也想打包docker image怎么办呢,我们可以用编译后的j ...

  9. 【CSS3】盒模型

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. js验证input输入框(字母,数字,符号,中文)

    [javascript]代码库 <h1>js验证输入框内容</h1> <br /> <br /> 只能输入英文 <input type=" ...