Proxy被设计用来为Store装载和保存Model类型的数据。所以Proxy需要持有一个Model。
数据可以保存在服务器端也可以保存在客户端,而使用者Store并不关心这个,所以Proxy提供了通用的访问接口CRUD。
reader和writer这两个类被用来解析服务器端返回的数据和格式化向服务器端发送的数据,对于保存在客户端的数据来说不需要writer对数据进行格式化所以这个类可以由Proxy的服务器端通信子类Server来持有。由于Model是Proxy所持有的,放把Model放到Proxy中时需要将Model也传给reader和writer所以讲这个方法也放入到Proxy中。
此外批量发送请求对于客户端和服务器端请求都是需要的所以Proxy持有这个方法。
另外还需要提一提的是当reader有onMetaChange这个方法的时候会先执行这个方法然后调用Proxy的onMetaChange,触发metachange事件,通知Model被修改了。
简单提一下客户端数据保存这块,Client作为Proxy的子类,定义了一个属性用来标识使用同步方法访问,还定义了一个抽象方法从来清除客户端数据,要求子类实现。
Client的子类有两个
Ext.data.proxy.Memory:简单的使用变量来存储数据,所以页面刷新后数据会丢失。
Ext.data.proxy.LocalStorage :使用html5的localStorage API 来存储数据
Ext.data.proxy.SessionStorage :使用HTML5 session storage 来存储数据
Server 作为Proxy的子类,被设计用来向服务器端发送数据。
主要实现了构造发送到服务器端参数,处理服务器端的返回结果。以及通过代理模式以相同的方式来处理CRUD这四个方法。
Server的子类有三个
Ext.data.proxy.Ajax 使用Json方式向服务器端发送数据和接收数据
Ext.data.proxy.Direct 通过Ajax使得客户端可以直接调用服务器端的方法。还提供了轮询方式向服务器端发送请求。
Ext.data.proxy.JsonP 可以跨域向服务器端发送请求