Extjs 4.2.2 - 默认排序器逻辑运行而不是自定义排序器
Extjs 4.2.2 - Default sorter logic runs instead of custom sorter
在 ExtJs 4.2.2 上,我需要覆盖某些列的默认排序器并使其按绝对值排序 (Math.abs)。
当我调试它时,我进入 doSort() 并获得正确的存储和方向(asc,desc),但由于某种原因它不执行 rthe sorterFn() - 并且 运行 默认分拣机(我知道它不会向控制台打印任何内容,客户端的行为是默认的)
{
itemId: someId,
//header: 'Abs. Change',
menuDisabled: false,
dataIndex: 'AbsChange',
sortable: true,
renderer: this.absChangeLabelRenderer,
width: 95,
align: 'right',
doSort: function (state) {
debugger;
var ds = this.up('tablepanel').store;
var field = this.getSortParam();
ds.sort({
property: field,
direction: state,
sorterFn: function (v1, v2) {
debugger;
console.log("value1 is {0}, value2 is {1}", v1, v2);
debugger;
v1 = Math.abs(v1.get(field));
v2 = Math.abs(v2.get(field));
// transform v1 and v2 here
return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
}
});
}
}
您应该在模型的字段定义中使用 sortType
配置,即 returns 用于排序的值的函数。
示例配置:
fields: [
// ... other fields ...
{
name: 'AbsChange',
sortType: function(value) {
return Math.abs(value);
}
}
]
在 ExtJs 4.2.2 上,我需要覆盖某些列的默认排序器并使其按绝对值排序 (Math.abs)。
当我调试它时,我进入 doSort() 并获得正确的存储和方向(asc,desc),但由于某种原因它不执行 rthe sorterFn() - 并且 运行 默认分拣机(我知道它不会向控制台打印任何内容,客户端的行为是默认的)
{
itemId: someId,
//header: 'Abs. Change',
menuDisabled: false,
dataIndex: 'AbsChange',
sortable: true,
renderer: this.absChangeLabelRenderer,
width: 95,
align: 'right',
doSort: function (state) {
debugger;
var ds = this.up('tablepanel').store;
var field = this.getSortParam();
ds.sort({
property: field,
direction: state,
sorterFn: function (v1, v2) {
debugger;
console.log("value1 is {0}, value2 is {1}", v1, v2);
debugger;
v1 = Math.abs(v1.get(field));
v2 = Math.abs(v2.get(field));
// transform v1 and v2 here
return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
}
});
}
}
您应该在模型的字段定义中使用 sortType
配置,即 returns 用于排序的值的函数。
示例配置:
fields: [
// ... other fields ...
{
name: 'AbsChange',
sortType: function(value) {
return Math.abs(value);
}
}
]