? 关于Ext.data中各个类的关系图我在前面已经做了一个,不用多言。其实啊。关于数据的显示,一般要经历三个流程:DataProxy-->DataReader-->Store。当然,三个部分都得是具体的类,这三个是抽象类。
如果按照一般性的理解,那么应当先从Proxy开始了。
出人意料:DataProxy的代码就是一空架子。且看:
Ext.data.DataProxy = function(){
??? this.addEvents(
??????? 'beforeload',
??????? 'load'
??? );
??? Ext.data.DataProxy.superclass.constructor.call(this);
};
Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
就是加两事件,从Observable继承了。如此而己,看代码就看晴晰了。再看一看HttpProxy,它的代码也就一百来行。比起其他类来说,真是小巫见大巫了。
先为Ext.data.HttpProxy给个描述吧:从一个Ext.data.Connection中读取数据到一个数据对象、从Ext.data.DataProxy继承的类。这个类不能跨站出数据,记住了。
此类构函数的文档中说:
HttpProxy( Object conn )
conn是一个connection对象或者是一个传给Ext.Ajax.request的options。如果传给它的是一个options,那么,将使用Ext.Ajax.request获取数据。
这个地方要注意一下。
下面来讲一下load函数,HttpProxy的一切精髓皆在于此。HttpProxy唯一的一个公开的函数。
load( Object params, Ext.data.DataReader reader, Function callback, Object scope, Object arg ) : void
从一个配置好的Ext.data.Connection中读取数据,它通过传递过来的实现自Ext.data.DataReader的对象来读取数据放到一个Ext.data.Records中。并且,在callback中处理这个结果数据。
参数:
params : Object
用于Ext.data.connection.request的options中的params。
reader : Ext.data.DataReader
被用来转化数据的。把数据转化成Ext.data.Records的形式。
callback : Function
??? 用于处理最终结果的回调,当HttpProxy取得connection中的数据,然后交给reader转化了数据后,所得结果集就会交给callback。它的参数如下:
object result
一个记录集对象。
object arg
就是load函数中传过来的arg。
boolean success
是否请求数据成功。
scope : Object
用于callback的scope。
arg : Object
用于callback的arg。
本来看文档没看出明堂来,一结合代码就明白了。原来callback就是用来处理数据的。如果正常的话,这个callback应当是由 store来提供吧。它实现这个接口,然后把数据从HttpProxy中接手过来。然后就后就得包装成store了。这还只是我的猜测,具体情况就要看 store的代码了。
现在,一切都明显了,取数据是connection的事,不用我们费心了,转换数据成记录集,这个是reader的事,也不用我们费心了。HttpProxy的作用事实就是二者的外观类。现在就要研究一下Ext.data.JsonReader了。
详细解决方案
extJs 2.1 学习札记(Ext.data.HttpProxy篇)
热度:194 发布时间:2012-11-23 22:54:33.0
相关解决方案
- Extjs grid 失去选中行的列数据
- extjs 后台有数据,但是返回到页面为空,jsonStore加载错误,这是咋回事
- ENCTYPE="multipart/form-data"文件下传有关问题
- enctype="multipart/form-data"的页面中,获取普通表单中文值,
- Spring Data 的有关问题
- S2SH、EXTJS、JSON调整后,EXTJS接收不到Struts2的Action传回的值,无语
- extjs 简单有关问题
- extjs+struts2解决办法
- 在jsp页面下导入.xls文件,报错:Posted content type isn't multipart/form-data
- ExtJs 处理 datetime 有关问题
- 【EXTJS】iframe里嵌套ext.window,怎样使ext.window弹出到iframe外,该怎么解决
- Tomcat + extjs 入门有关问题
- extjs ColumnModel 怎么实现表格中的数据小数点对齐
- 关于enctype="multipart/form-data"及过滤器的怪异有关问题~
- spring data jpa查询有关问题
- Extjs 变量前的一个加号代表什么意思?解决方法
- extjs grid 怎么实现 行选中变色
- ExtJs 提交表单的小疑点
- 错误详细信息: System.Data.OleDb.OleDbException: 表 'table_user' 已存在
- 错误详细信息: System.Data.OleDb.OleDbException: 表 'table_user' 已存在
- var das = eval("(" + data + ")"); 提示语法异常求解
- 晕!装.NEt Framework v1.1竟然找不到System.Data.OracleClient
- 未能加载资料或程序集“System.Data.SQLite”或它的一个依赖。试图加载格式不正确的程序
- c#中,运作程序时,提示mysql.data load failed
- 用户代码未处理 System.Data.SqlClient.SqlException 的有关问题,求教育?
- “System.Data.dll”类型的错误 高手来
- System.Data.SqlClient.SqlError: 备份集中的数据库备份与现有的 'Xblog_Data' 数据库不同,该怎么解决
- 关于.net中使用system.data.sqlite.dll,一直不太明白是如何实现的
- js转json,eval('(' + data + ')')事先和之后的数据不一致~
- MVC 客户端印证信息的 data-val-number