Dojo 增强网格嵌套排序无法排序
Posted
技术标签:
【中文标题】Dojo 增强网格嵌套排序无法排序【英文标题】:Dojo Enhanced Grid nested sorting not able to sort 【发布时间】:2013-03-29 14:02:37 【问题描述】:我正在使用带有分页和嵌套排序插件的 Dojo 增强网格。在网格中,当我单击列标题上的向下箭头时,元素没有正确排序。 假设我有: 哈尔 阿马尔 米米德1 米米德2 1 2
所以当我对它们进行排序时,它们变成: 1 2 米米德1 米米德2 阿马尔 xhar
我希望订单是:1 2 amar Memid1 Memid2 xhar 这是为什么?可以做些什么来避免这种情况?
【问题讨论】:
【参考方案1】:就像 Lucian 说的,你可以编写自己的排序方法。正如您在documentation 中所读到的,您可以通过添加NestedSorting
插件来启用自定义排序。您可以通过添加以下内容来做到这一点:
dojo.require("dojox.grid.enhanced.plugins.NestedSorting");
然后你只需要在你的网格对象上设置属性nestedSorting: true
。
排序本身并不依赖于网格,而是依赖于商店。您可以在ItemFileReadStore
的documentation 中阅读有关自定义排序的更多信息。你想做的是这样的:
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 下对其进行了测试。结果可见here。
【讨论】:
【参考方案2】:创建一个只有小写值的列并使用该列进行排序,但不要在您的网格中显示该列。隐藏此列。小写字母似乎排在大写字母之后,因此您需要将所有内容都设为小写。
另一种可能性是编写您自己的排序方法并将其连接到您的网格。
【讨论】:
以上是关于Dojo 增强网格嵌套排序无法排序的主要内容,如果未能解决你的问题,请参考以下文章