理解Ext.data.JsonStore 对象

来源:互联网 发布:mysql数据库无法写入 编辑:程序博客网 时间:2024/05/22 12:47
Ext.data.JsonStore 对象  


先来看看这个对象是干嘛的:

Json:JS的数据格式
Store:名词是商店,商店里可以摆放货物(数据).动词是储藏,商店里的货物都是按一定规律排放的,自然我们的数据也要按一定的规律排放.
JsonStore:通俗讲就是Json格式数据的一个商店了.里面不仅有数据,而且还可以定义数据的存放规则,还有店员(方法),你可以用方法获取数据,以及把这些数据删除\更新\添加等…


Ext.data.JsonReader 对象


那我们先来说说怎么摆放数据,不然货物进来了乱堆可不行.这就要说到Ext.data.JsonReader 这个对象了.
因为 Ext.data.JsonStore 已经包含了 Ext.data.JsonReader 所以我们在新建一个 Ext.data.JsonStore 实例的时候,并不需要再建个 Ext.data.JsonReader 出来.
这里把 Ext.data.JsonReader 的几个常用属性列出来.其它的可以去参考它的API: JsonReader .
我们要先拿到货了,才能判断这个货是摆在哪里对吧,所以先拿货物清单出来瞧瞧:


{   
    results: 2000,   
    rows: [   
    { id: 1, firstname: 'Bill', occupation: 'Gardener' },   
        { id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' },   
        ...   
    ]   
}  
{
    results: 2000,
    rows: [
    { id: 1, firstname: 'Bill', occupation: 'Gardener' },
     { id: 2, firstname: 'Ben' , occupation: 'Horticulturalist' },
     ...
    ]
}


这清单上有2个属性,results 说明这个货物有2000件,rows 是个数组,自然是2000条了,里面的单条信息就是我们要的具体货物信息了.单件货物有3个属性 id, firstname 和 occupation (天,这些’货物’好像是人) .
(注意这个清单里的属性是我们写的.所以也可以是别的,如:你可以把 results 写成totalCount 或者把 rows 写成 data,或者把 occupation 写成 other,当然 id 这个属性有点特殊,但也没死规定不能换成别的,哈哈 )
好了,我们有清单了,但我们要把这个清单录进电脑,让其他人也能看到,可是我们能一个个输这些也太麻烦了.所以我们能要告诉电脑怎么读这个清单.


首先是totalProperty : ‘results’就是确定货物的总件数了.
其次是root :’rows’ 告诉电脑我们的清单是哪个数组
现在我们来设置 fields 来读取这个数组:


"fields": [   
    {"name": "name"},   
    {"name": "job", "mapping": "occupation"}   
]  
"fields": [
 {"name": "name"},
 {"name": "job", "mapping": "occupation"}
]


{"name": "job", "mapping": "occupation"} 告诉电脑把occupation 属性转为 job.
{"name": "name"} 告诉电脑把 id 转成 name. 为什么是id呢,这边又涉及的JsonReader 对象里的一个属性idProperty(默认值是’id’) ,他告诉电脑,id 是默认的属性.你也可以把其它的设成默认属性,如idProperty: ‘firstname’,这样当我们{"name": "name"} 的时候,就是告诉电脑把firstname’转成name 了.
Fields 现在看来是个数组.那什么时候才是个对象呢,就是当rows里的单条记录只有1个属性的时候了.




Ext.data.JsonStore 对象加载数据 
好了.我们已经告诉机器怎么读清单了,但现在有个问题,我们要去哪里读这个清单.这里就开始用到JsonStore 自己的属性了.


url : 数据清单的地址,这个地址输出的结果就是上面已经写了的那个 2000数据的清单.这里会用AJAX调用.
autoLoad :是否在JsonStore对象创建后自动打开 url并加载数据.不写这个属性默认是不会自动加载,等同于写autoLoad:false
autoLoad 可以是布尔,也可以是一个对象,当是对象的时候,这个对象就会在加载的时候传递到JsonStore的load 方法里.这个对象可以参考API中的 load 方法, 有一些特定的属性.当我们把autoLoad 设为false 或者不设置该值时,我们就需要在后续的代码中手动调用 load() 方法才能打开url并加载数据了.


JsonStore 还有其它的配置参数以及方法 ,如:如何得到单条数据,如何添加新数据\删除\更新等.. 详见API: JsonStore


load方法. 
load(Object options) : Boolean 默认是返回true,但当我们在监听beforeload 事件时,定义的句柄返回 false,则load 停止(也就是不打开url加载数据了)并返回false.
options:load时定义的参数,这个就是autoLoad那要传的一样了.
params 打开url后附带传递的参数对象,如:{id:’1234’}
callback 函数,当数据加载完成后调用的函数,有3个参数如:


r : Ext.data.Record[] 记录集数组. 
options : 发送给服务器的对象{params:{id:’1234’}} 
success : 是否成功,布尔. 
scope 定义callback的作用域 
add 是添加到现有数据后,还是替换现有数据.默认是替换 false:替换现有数据
原创粉丝点击