我正在使用带分页和嵌套排序插件的Dojo Enhanced网格。在网格中,当我单击列标题上的向下箭头时,元素未正确排序。 假设我有: xhar 阿马尔 Memid1 Memid2 1 2
因此,当我对它们进行排序时,它们会成为 1 2 Memid1 Memid2 阿马尔 xhar
我希望命令是:1 2 amar Memid1 Memid2 xhar 这是为什么?可以做些什么来避免这种情况?
答案 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)
创建一个只有较小案例值的列,并使用此列进行排序,但不要在网格中显示此列。保持此列隐藏。小写字母似乎是在大写字母后面出现的,这就是为什么你需要把所有东西都做成小写的。
另一种可能性是编写自己的排序方法并将其连接到网格。