1

我正在使用带有分页和嵌套排序插件的 Dojo 增强网格。在网格中,当我单击列标题上的向下箭头时,元素没有正确排序。假设我有:xhar amar Memid1 Memid2 1 2

所以当我对它们进行排序时,它们变成:1 2 Memid1 Memid2 amar xhar

我希望订单是:1 2 amar Memid1 Memid2 xhar 为什么会这样?可以做些什么来避免这种情况?

4

2 回答 2

3

就像 Lucian 说的,你可以编写自己的排序方法。正如您在文档NestedSorting中所读到的,您可以通过添加插件来启用自定义排序。您可以通过添加以下内容来做到这一点:

dojo.require("dojox.grid.enhanced.plugins.NestedSorting");

然后你只需要nestedSorting: true在你的网格对象上设置属性。

排序本身并不依赖于网格,而是依赖于商店。您可以. ItemFileReadStore你想要做的是这样的:

grid.store.comparatorMap = new Object();
grid.store.comparatorMap["col1"] = function(a, b) {
    if (a.toLowerCase() < b.toLowerCase()) {
         return -1;   
    } else if (a.toLowerCase() == b.toLowerCase()) {
        return 0;
    } else {
        return 1;
    }
};

如您所见,我修改了比较器映射col1,您需要将其修改为您需要的列。该函数本身是纯 JavaScript,并且在许多语言中都可以进行比较。如果在排序时字符串 a 应该在字符串 b 之前,则返回一个负数 (-1),当两个字符串相等时,您需要返回 0,如果字符串 b 应该在字符串 a 之前,则它应该是 1。要启用不区分大小写,您需要比较两个字符串的小写变体。

我用新增的内容更新了我之前的 JSFiddle(上一个问题),并在 Dojo 1.6 下对其进行了测试。结果可以在这里看到。

于 2013-04-02T09:14:29.943 回答
0

创建一个只有小写值的列并使用此列进行排序,但不要在网格中显示此列。隐藏此列。小写字母似乎排在大写字母之后,因此您需要将所有内容都设为小写。

另一种可能性是编写您自己的排序方法并将其连接到您的网格。

于 2013-04-01T22:31:40.300 回答