Dojo增强型网格嵌套排序无法排序

时间:2013-03-29 14:02:37

标签: javascript sorting dojo grid

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

因此,当我对它们进行排序时,它们会成为 1 2 Memid1 Memid2 阿马尔 xhar

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

2 个答案:

答案 0 :(得分:3)

像Lucian说的那样,你可以编写自己的排序方法。正如您可以在documentation中阅读的那样,您可以通过添加NestedSorting插件来启用自定义排序。您可以通过添加以下内容来完成此操作:

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

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

排序本身不依赖于网格,而是依赖于商店。您可以在ItemFileReadStore的{​​{3}}中详细了解自定义排序。你想做的是这样的:

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下对其进行了测试。结果可见documentation

答案 1 :(得分:0)

创建一个只有较小案例值的列,并使用此列进行排序,但不要在网格中显示此列。保持此列隐藏。小写字母似乎是在大写字母后面出现的,这就是为什么你需要把所有东西都做成小写的。

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