在extjs的项目开发中,有时候中弄不清record中的 mapping和columnModel中的dataIndex的区别,在这里做下备注
数据集 data:
var MyRecord = Ext.data.Record.create([
{name: 'title'},
{name: 'username', mapping: 'author'},
{name: 'loginTimes', type: 'int'}
]);
var myReader = new Ext.data.JsonReader({
totalProperty: "results",
root: "rows",
id: "id"
}, MyRecord);
这里的JsonReader可以解析下面的JSON数据:
{ 'results': 2, 'rows': [
{ id: 1, title: '测试', author: '小王', loginTimes: 3 },
{ id: 2, title: 'Ben', author: 'williamraym', loginTimes:13} ]
}
在创建myRecord中 {name: 'username', mapping: 'author'} 中就用到了mapping,在数据中没有。record就会解析json数据中的 author 属性。
总结 mapping的作用是 reader解析数据的时候,与数据做匹配解析用的
dataIndex是column中列对应的数据集字段
var cm = new Ext.grid.ColumnModel([ {header:'编号',dataIndex:'id',sortable:true}, {header:'名称',dataIndex:'name'}, {header:'描述',dataIndex:'descn'} ]); var data = [ ['1','name1','descn1'], ['2','name2','descn2'], ['3','name3','descn3'], ['4','name4','descn4'], ['5','name5','descn5'] ]; var store = new Ext.data.Store({ proxy: new Ext.data.MemoryProxy(data), reader: new Ext.data.ArrayReader({}, [ {name: 'id',mapping:1}, {name: 'name',mapping:0}, {name: 'descn',mapping:2} ]) }); store.load(); var grid = new Ext.grid.GridPanel({ autoHeight: true, renderTo: 'grid', store: store, cm: cm });
dataIndex是在ColumnModel中。Mapping是在render中。dataIndex是关联columnMode和store中render的name。 mapping是关联 store和 data数据的