? 关于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加载错误,这是咋回事
- Spring Data 的有关问题
- 【EXTJS】iframe里嵌套ext.window,怎样使ext.window弹出到iframe外,该怎么解决
- Tomcat + extjs 入门有关问题
- extjs ColumnModel 怎么实现表格中的数据小数点对齐
- spring data jpa查询有关问题
- Extjs 变量前的一个加号代表什么意思?解决方法
- extjs grid 怎么实现 行选中变色
- var das = eval("(" + data + ")"); 提示语法异常求解
- js转json,eval('(' + data + ')')事先和之后的数据不一致~
- 命名空间“System.Data”中不存在门类或命名空间名称“Linq”(是否缺少程序集引用?)
- 没法将类型“System.Data.DataSet”隐式转换为“System.Collections.Generic.List
- 没法将类型“bool”隐式转换为“System.Data.DataTable
- System.Data.SqlClient.SqlDataReader”未定义构造函数解决方法
- 无法从“string”转换为“System.Data.DataColumn[]解决方法
- System.Data.OracleClient.OracleException: ORA-01841: (完整) 年份值必须介于 -4713 和 +9999解决方法
- ComponentArt:Grid 单击第二页时 报the data could not be loaded,该如何处理
- 无法将类型“System.Data.SqlClient.SqlDataReader”隐式转换为“int”,该怎么解决
- vs2010如何找不到System.data.oracleClient
- 如何不能引用System.Data
- 无法将类型“System.Data.SqlClient.SqlCommand”隐式转换为“string”,该怎么处理
- The conversion of a char data type to a datetime data type resulted in an out-of-range datetime解决方案
- vs2005中global.asax中在哪平添using System.Data.SqlClient;
- XXX对象无法强制转换成“System.Data.DataRowView”2天了还没解决,该怎么解决
- 无法从int隐转换到System.Data.SqlClient.解决思路
- 如何在aspx页面 如(login.aspx)引用命名空间(System.data.sqlclient)
- 小弟我想将数据绑定到dropdownlist中,可是下拉列表出现的是System.Data.
- 没法将类型“object”隐式转换为“System.Data.DataTable”。存在一个显式转换(是否缺少强制转换?)
- 请帮帮小弟我。DataBinding:“System.Data.DataRowView”不包含名为“ID”的属性