Extjs4 在ExtJS网格中,如何访问作为排序集一部分的数据存储字段
如何访问属于排序集的列/数据存储字段 我希望修改a网格的排序参数以进行远程排序。我需要远程排序参数的排序键来匹配列的字段的映射属性。我需要通过正常的“列标题单击对数据排序”功能实现这些事情 远程排序和字段映射(ExtJS 4.1) 这个功能似乎没有在ExtJS中实现。下面是一个使用ExtJS4提供的函数的解决方案。通过模型原型访问映射字段有点脏,但它可以完成以下任务:Extjs4 在ExtJS网格中,如何访问作为排序集一部分的数据存储字段,extjs4,Extjs4,如何访问属于排序集的列/数据存储字段 我希望修改a网格的排序参数以进行远程排序。我需要远程排序参数的排序键来匹配列的字段的映射属性。我需要通过正常的“列标题单击对数据排序”功能实现这些事情 远程排序和字段映射(ExtJS 4.1) 这个功能似乎没有在ExtJS中实现。下面是一个使用ExtJS4提供的函数的解决方案。通过模型原型访问映射字段有点脏,但它可以完成以下任务: var store = Ext.create('Ext.data.Store', { ..., proxy: {
var store = Ext.create('Ext.data.Store', {
...,
proxy: {
...,
encodeSorters: function (sorters) {
var model = store.proxy.model,
map = model.prototype.fields.map;
return Ext.encode(Ext.Array.map(sorters, function (sorter) {
return {
property : map[sorter.property].mapping || sorter.property,
direction: sorter.direction
};
}));
}
}
});
但是,更重要的是要覆盖:
假设您使用的是simpleSortMode,您可以在商店中执行类似的操作
listeners: {
beforeload: function( store, operation, eOpts ) {
if (store.sorters.length > 0) {
var sorter = store.sorters.getAt(0),
dir = sorter.direction,
prop = sorter.property,
fields = store.model.getFields(),
i,
applyProp = prop;
for (i = 0; i < fields.length; i++) {
if (fields[i].name == prop) {
applyProp = fields[i].mapping || prop;
break;
}
}
//clearing the sorters since the simpleSortMode is true so there will be only one sorter
store.sorters.clear();
store.sorters.insert(0, applyProp, new Ext.util.Sorter({
property : applyProp,
direction: dir
}));
}
}
},
侦听器:{
加载前:功能(存储、操作、eOpts){
如果(store.sorters.length>0){
var分拣机=仓库分拣机getAt(0),
dir=分拣机方向,
prop=sorter.property,
fields=store.model.getFields(),
我
applyProp=prop;
对于(i=0;i
我需要确定哪些列被排序,然后获取列的字段,然后确定这些字段的“映射”,最后使用映射设置远程排序的排序参数(例如在“beforeload”上)。文档显示存储具有“Sorter”属性,这是“Ext.util.Sorter”对象的集合。来源表明我们应该能够访问分拣机的“属性”方法,尽管它不在文档中。
listeners: {
beforeload: function( store, operation, eOpts ) {
if (store.sorters.length > 0) {
var sorter = store.sorters.getAt(0),
dir = sorter.direction,
prop = sorter.property,
fields = store.model.getFields(),
i,
applyProp = prop;
for (i = 0; i < fields.length; i++) {
if (fields[i].name == prop) {
applyProp = fields[i].mapping || prop;
break;
}
}
//clearing the sorters since the simpleSortMode is true so there will be only one sorter
store.sorters.clear();
store.sorters.insert(0, applyProp, new Ext.util.Sorter({
property : applyProp,
direction: dir
}));
}
}
},