dgrid 自定义排序问题
dgrid custom sort issue
我正在尝试按照 kfranqueiro 在此 link - https://github.com/SitePen/dgrid/issues/276.
中的建议覆盖 dgrid 中的排序逻辑
我按排序顺序从服务器获取数据,只想更新列 header 的 UI。我正在这样做 -
On(mygrid, 'dgrid-sort', lang.hitch( this,function(event){
var sort = event.sort[0];
var order = this.sort.descending ? "descending" : "ascending";
console.log("Sort "+ this.sort.property + " in " +order+" order.");
event.preventDefault();
mygrid.updateSortArrow(event.sort, true);
myFunctionToRefreshGrid();
}));
...
myFunctionToRefreshGrid: function() {
...//get data from server in sorted order
var mystore = new Memory({data: sortedDataFromServer, idProperty: 'id'});
mygrid.set("collection", mystore);
...
}
Memory
这里是"dstore/Memory"
。我正在使用 dgrid 0.4,
dstore 1.1
和 dojo 1.10.4
在调用 set('collection',...)
之前,我看到 sortedDataFromServer
处于所需的排序顺序。但是由于某种原因,网格中的顺序不同。例如,当按降序排序时,我看到以小写字母开头的值首先出现在降序中,然后以大写字母开头的值按排序顺序出现。看起来 dstore 正在做更多的事情。
这是怎么回事?难道我做错了什么?有 different/better 自定义排序的方法吗?
谢谢,
我认为你做的是对的,这里唯一的问题是你没有重置网格的排序 属性,你用排序的顺序重新启动内存,它会自动排序
你打电话后
event.preventDefault();
称之为
mygrid.set("sort", null);
我在我的一个网格中进行自定义排序,如下所示
self.xrefGrid.on("dgrid-sort", function (event) {
var sort = event.sort[0];
event.preventDefault();
self.xrefGrid.set('sort', function (a, b) {
var aValue,bValue;
if (a[sort.attribute] && typeof a[sort.attribute] == "string")
aValue = a[sort.attribute].toLowerCase();
if (b[sort.attribute] && typeof b[sort.attribute] == "string")
bValue = b[sort.attribute].toLowerCase();
var result = aValue > bValue ? 1 : -1;
return result * (sort.descending ? -1 : 1);
});
self.xrefGrid.updateSortArrow(event.sort, true);
});
这就是我最终处理这种情况的方式 -
正如所怀疑的那样,collection/store 正在进一步排序我的数据,因此不一致。我如下所示自定义商店(内存),并在将数据设置到我的网格时使用自定义商店。
var CustomGridStore = declare([Memory],{
sort: function (sorted) {
sorted = [];//Prevent the collection from sorting the data
return this.inherited(arguments);
}
});
我正在尝试按照 kfranqueiro 在此 link - https://github.com/SitePen/dgrid/issues/276.
中的建议覆盖 dgrid 中的排序逻辑我按排序顺序从服务器获取数据,只想更新列 header 的 UI。我正在这样做 -
On(mygrid, 'dgrid-sort', lang.hitch( this,function(event){
var sort = event.sort[0];
var order = this.sort.descending ? "descending" : "ascending";
console.log("Sort "+ this.sort.property + " in " +order+" order.");
event.preventDefault();
mygrid.updateSortArrow(event.sort, true);
myFunctionToRefreshGrid();
}));
...
myFunctionToRefreshGrid: function() {
...//get data from server in sorted order
var mystore = new Memory({data: sortedDataFromServer, idProperty: 'id'});
mygrid.set("collection", mystore);
...
}
Memory
这里是"dstore/Memory"
。我正在使用 dgrid 0.4,
dstore 1.1
和 dojo 1.10.4
在调用 set('collection',...)
之前,我看到 sortedDataFromServer
处于所需的排序顺序。但是由于某种原因,网格中的顺序不同。例如,当按降序排序时,我看到以小写字母开头的值首先出现在降序中,然后以大写字母开头的值按排序顺序出现。看起来 dstore 正在做更多的事情。
这是怎么回事?难道我做错了什么?有 different/better 自定义排序的方法吗?
谢谢,
我认为你做的是对的,这里唯一的问题是你没有重置网格的排序 属性,你用排序的顺序重新启动内存,它会自动排序
你打电话后
event.preventDefault();
称之为
mygrid.set("sort", null);
我在我的一个网格中进行自定义排序,如下所示
self.xrefGrid.on("dgrid-sort", function (event) {
var sort = event.sort[0];
event.preventDefault();
self.xrefGrid.set('sort', function (a, b) {
var aValue,bValue;
if (a[sort.attribute] && typeof a[sort.attribute] == "string")
aValue = a[sort.attribute].toLowerCase();
if (b[sort.attribute] && typeof b[sort.attribute] == "string")
bValue = b[sort.attribute].toLowerCase();
var result = aValue > bValue ? 1 : -1;
return result * (sort.descending ? -1 : 1);
});
self.xrefGrid.updateSortArrow(event.sort, true);
});
这就是我最终处理这种情况的方式 - 正如所怀疑的那样,collection/store 正在进一步排序我的数据,因此不一致。我如下所示自定义商店(内存),并在将数据设置到我的网格时使用自定义商店。
var CustomGridStore = declare([Memory],{
sort: function (sorted) {
sorted = [];//Prevent the collection from sorting the data
return this.inherited(arguments);
}
});