【发布时间】:2014-08-08 08:06:20
【问题描述】:
我最近将 EXT JS 的版本更新为 5,并且覆盖 doSort 函数不再起作用。有人知道怎么做吗?
覆盖示例:
{
text: 'Custom',
sortable : true,
dataIndex: 'customsort',
doSort: function(state) {
var ds = this.up('grid').getStore();
var field = this.getSortParam();
ds.sort({
property: field,
direction: state,
sorterFn: function(v1, v2){
v1 = v1.get(field);
v2 = v2.get(field);
return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
}
});
}
}
编辑 1: 我只是尝试@tomgranerod 的解决方案,但 me.sortState 始终是“未定义”。 所以我这样做是为了更新我的变量:
sort: function () {
var me = this,
grid = me.up('tablepanel'),
store = grid.store;
me.sortState = me.sortState === 'ASC' ? 'DESC' : 'ASC';
Ext.suspendLayouts();
me.sorting = true;
store.sort({
property: me.getSortParam(),
direction: me.sortState,
sortFn: function (v1, v2) {
v1 = v1.get(field);
v2 = v2.get(field);
return v1.length > v2.length ? 1 : (v1.length < v2.length ? -1 : 0);
}
});
delete me.sorting;
Ext.resumeLayouts(true);
}
但是 sortFn 函数永远不会被调用。我不知道为什么。 ===> !!!!它适用于 EXT JS 5.0.1,但永远不会调用 sortFin 函数。 !!!!
编辑 2: 这就是我想要的:
升序:
if (v1 and v2 are numbers) return v1 > v2;
else if (v1 is a number and v2 a string) return false;
else if (v1 is a string and v2 a number) return true;
else if (v1 and v2 are strings) return v1 > v2;
描述:
if (v1 and v2 are numbers) return v1 < v2;
else if (v1 is a number and v2 a string) return true;
else if (v1 is a string and v2 a number) return false;
else if (v1 and v2 are strings) return v1 < v2;
【问题讨论】:
-
你不应该覆盖
doSort,它是私有的。您应该期望它在升级时中断。你为什么不给网格提供一个分类器呢?见docs-origin.sencha.com/extjs/4.2.2/#!/api/… 或docs-origin.sencha.com/extjs/4.2.2/#!/example/grid/… -
如果您在fiddle.sencha.com/#home 发布一个运行(损坏)的示例,我可以看看
-
感谢胡安的帮助。我尝试为煎茶小提琴树立一个榜样。
-
这是小提琴:fiddle.sencha.com/#fiddle/8kk。我尝试对引用进行排序以具有此顺序 => ASC:1、12、103、T01、T02 和 DESC:T02、T01、103、12、1。但如果您测试排序并不会这样做。所以我必须覆盖排序。
-
正确的方法是给你的
Ext.data.Field提供一个分拣机,我会尽快看看,但可能要几个小时。顺便说一句,小提琴上的问题非常简单,看起来很容易
标签: javascript extjs extjs5