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.1dojo 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);
    }
});