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

Dojo Enhanced Grid nested sorting not able to sort

本文关键字:排序 嵌套 增强 网格 Dojo      更新时间:2023-09-26

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

所以当我对它们排序时,它们变成:12Memid1Memid2阿玛xhar

我想要的顺序是:1 2 amar Memid1 Memid2 xhar为什么呢?怎样才能避免这种情况呢?

正如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下测试了它。结果如下:

创建一个只有小写值的列,并使用该列进行排序,但不要在网格中显示该列。保持这一栏隐藏。

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