【问题标题】:dgrid custom sort issuedgrid自定义排序问题
【发布时间】:2015-08-25 07:25:56
【问题描述】:

我正在尝试按照 kfranqueiro 在此链接中的建议覆盖 dgrid 中的排序逻辑 - https://github.com/SitePen/dgrid/issues/276

我按排序顺序从服务器获取数据,只想更新列标题的 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 正在做更多的事情。

会发生什么?难道我做错了什么?是否有不同/更好的方式来进行自定义排序?

谢谢,

【问题讨论】:

    标签: javascript dojo dgrid dstore


    【解决方案1】:

    这就是我最终解决这种情况的方式 - 正如怀疑的那样,集合/商店正在进一步分类我的数据,因此不一致。我自定义了存储(内存),如下所示,并在将数据设置到我的网格时使用了自定义存储。

    var CustomGridStore = declare([Memory],{
        sort: function (sorted) {
            sorted = [];//Prevent the collection from sorting the data
            return this.inherited(arguments);
        }
    });
    

    【讨论】:

      【解决方案2】:

      我认为你做对了,这里唯一的问题是你没有重置网格的排序属性,你用排序顺序重新启动内存,它会自动排序

      打电话后

      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);
                  });
      

      【讨论】:

      • 没用。知道了 - TypeError: sort is null Grid.js:379:7 TypeError: grid.sort is null。请注意,我正在调用 mygrid.updateSortArrow(event.sort, true); 在 UI 上显示排序指示器。
      • 它应该可以工作,我正在我的一个网格中进行排序,请参见上面的示例
      猜你喜欢
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多