常用的数据格式一般都是json或者数组,其他的用得少,要有其他格式,让后台的同事还是转成这两种传过来吧!
其实吧数据源store的设置中就两个重要属性,一个是数据从那来的,二是怎么解析那些数据。基本就这两个了,但写法有很多,其实功能都一样,怎么简单就这么来吧,也没必要记那么多。
先说说内联数据(也就是js中可以获取的数据)
比如有个预定义的数据arrayData(数组格式) ,jsonData(json格式)
var arrayData= [ ['1','name1','descn1'], ['2','name2','descn2'], ['3','name3','descn3'], ['4','name4','descn4'], ['5','name5','descn5'] ]; var jsonData= [ {id:'1',name:'name1',desc:'descn1'}, {id:'2',name:'name2',desc:'descn2'}, {id:'3',name:'name3',desc:'descn3'}, {id:'4',name:'name4',desc:'descn4'}, {id:'5',name:'name5',desc:'descn5'} ];
看看怎么定义store呢(json格式数据用Ext.data.JsonStore ,数组就用Ext.data.ArrayStore)
var store = new Ext.data.JsonStore({ //从那获取数据,你可以随便选个写法 data: jsonData , proxy: new Ext.data.MemoryProxy(data), //怎么解析那些数据,你也可以随便写个 fields:['id', 'name', 'desc'], fields:new Ext.data.Record.create(['id', 'name', 'desc']), reader: new Ext.data.ArrayReader({}, [ {name: 'id', mapping: 1}, //假如顺序加数据可以不用指定mapping 的 {name: 'name', mapping: 0}, {name: 'descn', mapping: 2} ]) });
最后store里的每一个数据都被转成了 Ext.data.Record ,这家伙是个对象,就是个 OO 对象,比如我们想看store里第二个数据的name是什么值,可以这样写
store.getAt(1).name
看到这里你可能很失望,我靠,看了那么多,只是个本地化数据的,老子要的是远程加载,后台传过来的数据!你也别生气,其实那个跟本地数据写法差不多的,你把从哪获取数据的地方改下就好了,换成 url 就好.(比如后台数据的请求地址是 ../getPerson 这个servlet ,你写成 url:'../getPerson' )假如你喜欢麻烦,也可以用 proxy的,设置下里边的属性就好