extJs 2.1学习笔记(Ext.data.JsonReader篇一)

有个事要说一下: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);

  好了,这一篇差不多了,未尽内容放下一篇中了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值