【发布时间】:2014-05-27 11:34:09
【问题描述】:
我想对剑道网格列进行排序。在下面的屏幕截图中,我需要对 WBS 列进行升序或降序排序。在该列中具有 1.1、1.1.1、1.2.1、1.2.1.1、1.2.1.2、1.3、2、2.1、2.1.1、2.2 等值,
【问题讨论】:
标签: mvvm kendo-ui telerik kendo-grid
我想对剑道网格列进行排序。在下面的屏幕截图中,我需要对 WBS 列进行升序或降序排序。在该列中具有 1.1、1.1.1、1.2.1、1.2.1.1、1.2.1.2、1.3、2、2.1、2.1.1、2.2 等值,
【问题讨论】:
标签: mvvm kendo-ui telerik kendo-grid
基本上你需要为WBS 列定义一个临时的compare 函数。这可以使用columns.sortable.compare。
现在,问题是发明一个能够根据需要比较两个值的函数。
我想到了以下几点:
"10.1.2" 变为 [ "10", "1", "2" ]。10.1 更小10.1.1)。这可能是这样的:
columns : [
...
{
field: "wbs",
width: 150,
title: "WBS",
sortable: {
compare: function (a, b) {
var wbs1 = a.wbs.split(".");
var wbs2 = b.wbs.split(".");
var idx = 0;
while (wbs1.length > idx && wbs2.length > idx) {
if (+wbs1[idx] > +wbs2[idx]) return true;
if (+wbs1[idx] < +wbs2[idx]) return false;
idx++;
}
return (wbs1.length > wbs2.length);
}
}
}
...
]
注意:正如我之前所说,作为split 的结果,我在数组中得到的是strings。所以我们使用一个小技巧来比较number 的值是非常重要的,它是在+ 之前。因此,当我执行if (+wbs1[idx] > +wbs2[idx]) 时,我实际上是在将wbs1[idx] 和wbs2[idx] 上的值作为数字进行比较。
你可以在这里看到它:http://jsfiddle.net/OnaBai/H4U7D/2/
【讨论】: