0

作为koGrid 2.1.1的一部分,我无法使默认排序起作用,这意味着如果您希望按特定列/方向对网格进行排序,您将不会获得预期的行为。koGrid 中的默认排序是在首次配置 gridOptions 时通过 sortInfo 实现的。

我使用jsFiddle创建了一个示例来演示此问题。您会注意到列表不是按名称排序的,即使我已经指定了sortInfo来这样做。

1. 使用排序信息初始化 koGrid:

        this.gridOptions = {
            data: self.myData,
            ...
            sortInfo: ko.observable({
                column: { "field": "name" },
                "direction": "asc" 
            })
            ...
        };

2. 注意列表没有排序,箭头也没有出现:

在此处输入图像描述

4

2 回答 2

2

如果指定,我将 koGrid 2.2.1 调试 js 更改为使用 sortInfo。基本上,我做了以下两个更改:

1. 创建了一个函数,将逐列返回到 Grid 对象中:

window.kg.Grid = function (options) {
...
self.columnByField = function (field) {
        if(field) {
           var column;
           $.each(self.columns(), function (i, c) {
              if(field == c.field) {
                 column = c;
                 return false;
              }
           });
           return column;
        }
    }
...
}

2. 更改 Grid 对象的 init 方法以查找 sortInfo 并对列进行排序:

window.kg.Grid = function (options) {
...
self.init = function () {
  ...
   self.buildColumns();
   var sortingProperties = self.sortInfo.peek();
   if(sortingProperties) {
      var col = self.columnByField(sortingProperties.column.field);
      if(col) {
         col.sortDirection(sortingProperties.direction === ASC ? DESC : ASC);
         col.sort();
      }

   }
  ...
}
...
}

通过这样做,解决了默认排序问题。我在 GitHub 上创建了一个 fork 项目,并在那里添加了新的调试 js 文件。

现在,当您第一次加载网格时,排序工作如下图所示:

在此处输入图像描述

于 2013-07-19T19:22:42.893 回答
0

为 gridOption sortInfo 添加函数,如下所示

 ....
    sortInfo: this.sortDetails;
  }

定义函数 sortDetails 如下

this.sortDetails.subscribe(function (data) {
        this.sortData.sort(function (left, right) {
            return left == right ? 0 : (left < right ? -1 : 1);
        });
    });
于 2015-07-09T08:44:05.560 回答