2013-07-19 225 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); 
     }); 
    });