嘿,别看关键就在这儿,事实上,它的代码很少的哦。加上注释才219行。研究研究。
有个事要说一下:DataProxy的子类呢,都有一个load来加载数据,DataReader的子类呢,都有一个read来读取数据。
而Ext.data.JsonReader有两个关键函数:read、readRecords。好了。来研究一下。
Ext.data.JsonReader = function(meta, recordType){
??? meta = meta || {};
??? Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType || meta.fields);
};
这是构造函数。简单。meta是数据格式定义,recordType是记录类型。其中recordType可以是一个定义记录的数组,也可以不传,而把记录的各个字段的定义放到meta中的fields字段中。且看它对父类构造函数的调用:
Ext.data.DataReader = function(meta, recordType){
this.meta = meta;
this.recordType = Ext.isArray(recordType) ?
Ext.data.Record.create(recordType) : recordType;
};
?
Ext.data.DataReader.prototype = { };
这下全明白了吧。recordType可以是记录类型,可以是字段定义数组,还可以不传。
所以,构造函数就是定义两个属性:meta、recordType。这两东西后面有用。
这个meta、recordType组成如何?这个必须说明,不然,这个类也就没法用了。
meta:
totalProperty json数据中,保存总记录数的属性
successProperty json数据中,保存是否返回成功的属性名
root json数据中,保存记录集的属性的属性名
id json数据中,记录中主键所对应的列的属性名
recordType:
这个东西,事实上要去看Ext.data.Record的create函数的文档,我且把它翻译一下,如下:
create( [Array o] ) : function
创建包含指定字段结构的继承自Ext.data.Record的类。静态方法。
参数:
o : Array
??? 一个定义记录结构的字段信息数组。每个数组元素包含name,其他可选的有:mapping、type。通过它们,可以让Ext.data.Reader从一个数据对象中获取各字段的值。每个字段定义对象都可能包含如下属性:
name : String
在记录中标志一个字段的名字。它通常用于引用指定字段,例如,在定义Ext.grid.ColumnModel的dataIndex属性时,要传过去的。
mapping : String
当在Ext.data.Reader中创建记录时,如何将json对象中指定属性值映射到此字段。
type : String
字段的类型,可能值为:
auto(默认值,没有任何转化)、string、int、float、boolean、date
?????????
????????? sortType : Mixed
Ext.data.SortTypes中的一个成员。
sortDir : String
排序方式,"ASC"或者"DESC"。
convert : Function
如果要对这个字段的值进行一些物殊处理,这时需要一个能定制的回调,用它来手工处理值。它的参数如下:
v : Mixed
通过mapping映射找到的值。已从json中取出来的。
rec : Mixed
在json中的,对应于此记录的json对象。
dateFormat : String
用于Date.parseDate函数的格式化字符串。
defaultValue : Mixed
当字段值在原数据中不存在时所取的默认值,默认为空字符串。
用法:
var TopicRecord = Ext.data.Record.create([
??? {name: 'title', mapping: 'topic_title'},
??? {name: 'author', mapping: 'username'},
??? {name: 'totalPosts', mapping: 'topic_replies', type: 'int'},
??? {name: 'lastPost', mapping: 'post_time', type: 'date'},
??? {name: 'lastPoster', mapping: 'user2'},
??? {name: 'excerpt', mapping: 'post_text'}
]);
var myNewRecord = new TopicRecord({
??? title: 'Do my job please',
??? author: 'noobie',
??? totalPosts: 1,
??? lastPost: new Date(),
??? lastPoster: 'Animal',
??? excerpt: 'No way dude!'
});
myStore.add(myNewRecord);
?
好了,这一篇差不多了,未尽内容放下一篇中了。
详细解决方案
extJs 2.1学习札记(Ext.data.JsonReader篇一)
热度:239 发布时间: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”的属性