我们先来看看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. 深入理解php内核 编写扩展 II:参数、数组和ZVALs

    原文:http://devzone.zend.com/article/1022-Extension-Writing-Part-II-Parameters-Arrays-and-ZVALs Part I ...

  2. iOS中常见的锁

    多线程的安全隐患 一块资源可能会被多个线程共享,也就是说多个线程可能会访问同一块资源. 比如多个线程同时操作同一个对象,同一个变量. 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题. 比 ...

  3. .NET Core快速入门教程 1、开篇:说说.NET Core的那些事儿

    一..NET Core的诞生 聊 .NET Core,就不得不说他的爸爸 .NET.当年Java刚刚兴起,如火如荼,微软也非常推崇Java,当时Windows平台的Java虚拟机就是微软按照JVM标准 ...

  4. 【jQuery】复选框的全选、反选,推断哪些复选框被选中

    本文与<[JavaScript]复选框的全选.反选.推断哪些复选框被选中>(点击打开链接)为姊妹篇,把里面内容再与jQuery框架中实现一次,相同做到例如以下的效果: 布局还是相同的布局, ...

  5. Javascript 方法apply和call的差别

    call与aplly都属于Function.prototype的一个方法.所以每一个function实例都有call.apply属性 同样点: call()方法和apply()方法的作用同样: 改变原 ...

  6. 从0引入 ASP.NET Identity Core

    原文出自Rui Figueiredo的博客,原文链接<ASP.NET Identity Core From Scratch> 译者注:这篇博文发布时正值Asp.Net Core 1.1 时 ...

  7. python 素因子分解

    在使用python解决问题之前,我们先说一下,什么是素因子分解 所谓素因子分解就是,先找这个数的所有约数(约数即:a%b == 0,也就是a可以被b整除) 例如:20的约数集合为 [1, 2, 5, ...

  8. MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案

    MySQL 导入外部数据时报错:1153: Got a packet bigger than 'max_allowed_packet' 解决方案 zoerywzhou@163.com http://w ...

  9. Sagit.Framework For IOS 开发框架入门教程4:注册页布局-被消灭的变量

    前言: 上篇写完:Sagit.Framework For IOS 开发框架入门教程3:Start引导页-框架布局和隐藏事件的内幕 之后,好久没写文章了,有IT连创业系列.有DotNetCore的一篇文 ...

  10. ES6异步操作Thunk、co和async

    使用Thunk函数对Generator函数进行流程管理,首先什么是Thunk函数?我们应该先说下参数的求值策略,编译器的求值策略一个是"传值调用"另一个是"传名调用&qu ...