ext.data.proxy.ajax,预览ExtJS 4.0的新功能(五):焕然一新的Store-Proxy.

接上文

Proxy

Ext.data.Proxy是一个极其关键的数据通信类。Proxy直译“代办”,可数据怎么能够代办?有点不通!Proxy究竟是什么含义?

依小弟浅见,定义Proxy即便定义数据源,起码Ext中AjaxProxy/ScriptProxy/LocalProxy/SessionProxy出现如此。当Store要为Ext.data.Model4

加载可能保留数据的时候,定然穿越这个Proxy类。翔实说,Proxy的垄断即便将所有最后的数据垄断视作为增、删、改、查四种,即Create、Read、Update或Delete。这四个垄断离别照射了create(),

read(), update()

和destroy()。不同的Proxy子类的任务即便要逐个去翔实化这些CRUD是什么了,然后才归来到Store。而CRUD措施中,都期待一个Ext.data.Operation

对象的垄断参数传入。……Operation

是什么?Opeartion是4.0的新内容,封装了Stroe即将厉行的动作消息、要修正的Ext.data.Model 实例等等。

在告终阶段,每个CRUD措施皆扶持异步的回调函数。

API的告终中,Proxy可分为ServerProxy和ClientProxy两大类:

Server Proxy即便穿越Request发送数据到远端;Client

Proxy的含义是在客户端保留本地的数据。下面就展开作推荐。 Ext.data.ServerProxy(AjaxProxy)

ServerProxy是AjaxProxy和ScriptTagProxy这个两个类的超类。等闲来说AjaxProxy是标兵情形下最常用的Proxy,版面代码中设定参数,穿越AJAX管道从服务端获得数据。AjaxProxy只针对同源的版面。不能脱离本版面的范围举行跨域(CrossDomain)获得数据。要举行跨域获得数据则利用ScriptTagProxy。志愿情形下,该当称ServerProxy为HttpProxy,因为这是涵盖所有HTTPProxy的超类——但在Ext4.0中作了调剂,HttpProxy则矮化到只是AjaxProxy的简写。原本3.x中的HttpProxy到这里却变为ServerProxy。

ScriptProxy的差异与旧版不大,原理上也是批准script

tag举行变相的跨域,缺点是只合乎JSON数据款式的时候。关于横亘的计划,我们还能够多看看Ext.util.JSONP这个类。

Ext中如何REST式Web资源?

万一必需举行RESTful的风格利用,我们能够在AjaxProxy的“GET/POST”基础上添置“PUT/DELETE”,富余利用这四个HTTP动词,对此,Ext的告终即便Ext.data.ResetProxy。ResetProxy中所供给的'create','read','update'

and'destroy'离别对应着POST、GET、PUT、DELETE措施(当心这里与AjaxProxy.actionMethods的不同,AjaxProxy.actionMethods限量在GET/POST垄断内告终。)。也即便说,ResetProxy管教着数据的API,除非创、见、变、灭的这四种CRUD垄断举行了定义之外,还离别将这些垄断照射到了RESTful的HTTP措施:GET、POST、PUT和DELETE。

其中Ext.data.RestProxy.actionMethods一项应坚持不变除非利用大局Ext.override()的措施遮蔽默认值,另外也能够用重写getMethod(由Ext.data.AjaxProxy继承获得)来轮换。总之,我们还能够伸展其他的HTTP动词。鉴于RestProxy代码行数比拟少,特贴出如下:

Ext.data.RestProxy = Ext.extend(Ext.data.AjaxProxy, { actionMethods: { create : 'POST', read : 'GET', update : 'PUT', destroy: 'DELETE' }, api: { create : 'create', read : 'read', update : 'update', destroy: 'destroy' }});

与旧版3.3tianyunpiano.com的Ext.data.Api比拟(参见3.x的推荐),固然都是环抱REST而设,但新版ResetProxy代码行数大幅收缩,之因而这么,开始推断是科学地施展了OO措施论所带来的收获(比拟一下旧版Api是单例的设计)。

Ext.data.ClientProxy(MemoryProxy/WebStorageProxy)

Ext.data.ClientProxy是为服务端而设的存储基类(因为ClientProxy是基类,请不要直接利用)。它的子类有Ext.data.MemoryProxy和Ext.data.WebStorageProxy,这两个子类的重要用处如下:MemoryProxy是内存中proxy,因而一刷新博览器的话,就未曾了本地数据。也即便MemoryProxy内的都是指内存中的数据,一旦刷新版面数据将不复存在。等闲来说不会直接利用到这个类,什么时候利用呢?例如一个User模型和起源不同的数据,它们之间的构造不是极其合乎,我们便能够灵方便用MemoryProxy和JsonReader作转换,然后加载到Store中去。

WebStorageProxy是Ext.data.LocalStorageProxy及Ext.data.SessionStorageProxy

的基类,它利用了HTML5新型的ley/value客户端存储计划来保留Ext.data.Model实例,到达离线永远化之目标。实例化WebStorageProxy的过程中,万一博览器不扶持HTML5客户端存储计划,就即刻抛出一个失常。

如UML图所示,WebStorageProxy有规范的CRUD措施;MemoryProxy只有read()措施;但它们都有clear()措施,这个措施会剔除去客户端的使所有登记数据,包括像IDs的这么的扶持数据。下面是利用Memory作转换的一个例子:

// 这时Store中所利用的模型。Ext.regModel('User', { fields: [ {name: 'id', type: 'int'}, {name: 'name', type: 'string'}, {name: 'phone', type: 'string', mapping: 'phoneNumber'} ]});// 此数据并不是与我们上面定义的模型所合乎,即便phone字段定然照射为phoneNumber。var data = { users: [ { id: 1, name: 'Ed Spencer', phoneNumber: '555 1234' }, { id: 2, name: 'Abe Elias', phoneNumber: '666 1234' } ]};// 当心如何设置reader中的“root: 'users'”,看看是怎么对应上面的数据构造的。var store = new Ext.data.Store({ autoLoad: true, model: 'User', data : data, proxy: { type: 'memory', reader: { type: 'json', root: 'users' } }});

继续,WebStorageProxy又有两个子类,它们是:

LocalStorageProxy:以HTML5本地存储为服务对象。SessionStorageProxy:以HTML5

Session存储为服务对象。

再次偏重,无论LocalStorageProxy还是SessionStorageProxy都是波及新型的HTML5功能的,因而博览器若不扶持HTML5的功能,WebStorageProxy的构造函数即刻就会抛出一个失常。利用本地存储的时候,必需一个寡二少双的ID作为储藏全副登记对象的KEY,并且铭刻送入的ID定然是寡二少双的,否则调用过程将是不安宁的。万一未曾送入ID,则storeId会视为ID。万一什么ID都未曾将会抛出一个失常。

Proxy总是联合Ext.data.Store利用的,另外你也能够直接地创立Proxy的,如下两例:

new Ext.data.Store({ proxy: { type: 'localstorage', id : 'myProxyKey' }});// 直接创立new Ext.data.LocalStorageProxy({ id : 'myOtherProxyKey'});

新供给的WebStorageProxy包括了离线(offline)的任务,除非WebStorageProxy,4.0的Ext还供给WebSqlProxy使得存储客户端能够借助SQL语句来告终。不过目前未曾觉察WebSqlProxy的源码,估计到最后公布才会目睹!步步高视频学习机

Store/Proxy小结

Data改变很大,可罗列许多的解说,这儿提出一个小地方:新的Ext.data.TreeStore/Ext.data.TreeReader引入。Ext.Tree不再利用TreeLoader的绑定数据形式,那是旧3.x之前的形式。其实未曾必需为Tree组件独自而设一种不同的数据模型。Ext4意识到这点,在这次公布中就能够看到Tree统一归Store的数据源。

如此这类的还有其他的吧~

话说中心群体成员EdSpencer是ExtJS4的架构设计者,他在SenchaCon大会上负责Ext的架构、新个性的演讲,另外Ext.data.*即即便出自他手的。借这里言语的时机,我感受该当客气地多谢他,不管怎么人家也是开源的。我们看到的是Ext.data.*获得了重新编写,构成这么的API场面,个人感受这是4.0其中改变最大的一项,并且是迷人的地方。诚如官方RoadMap所说的“A

rewrite of the Ext.datapackage with a brand new architecture and

enormous newcapabilities”果然价廉物美。

Data局部还有戏。Ext.data.Operation切实上说的是CRUD垄断,也即便介乎于Store与Proxy之间的CRUD垄断。而Ext.data.Batch是Opeartion的聚集形式,把多个Operation打包起来就成为了Batch。另外还有reader/writer,下一期有时机再展开谈论。

请注明出处Ext中文网

(http://om)。Example类保证了它所存储的height和width值永远非负数,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值