2013-07-19 69 views
0

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

我用jsFiddle创建了一个示例来演示这个问题。您可以注意到该列表未按名称排序,即使我已指定sortInfo来这样做。

1.初始化koGrid与某种信息:

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

2.注意列表不排序,既没有箭头显示出来:

enter image description here

回答

2

我改变koGrid 2.2.1调试js使用sortInfo,如果指定的话。基本上,我做了两个变化如下:

1.创建其通过字段返回塔送入网格对象的功能:

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.变更网格对象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(); 
     } 

    } 
    ... 
} 
... 
} 

通过这种默认的排序问题就解决了。我创建了一个叉project on GitHub并在那里添加了新的debug js文件。

现在,当您加载网格的第一次分拣作品下面的图片显示:对于gridOption的SortInfo

enter image description here

0

附加功能如下面

.... 
    sortInfo: this.sortDetails; 
    } 

定义功能sortDetails像下面一样

this.sortDetails.subscribe(function (data) { 
     this.sortData.sort(function (left, right) { 
      return left == right ? 0 : (left < right ? -1 : 1); 
     }); 
    });