2016-03-02 918 views
0

我有一個自定義的排序功能,可以按字母順序排序。我已經將它設置爲ag-grid中提到的比較器,但是我沒有發現它的工作原理。請放一些燈。如何在ag-grid中編寫自定義排序?

var naturalSort = function(valueA, valueB, nodeA, nodeB, isInverted) { 

     var NUMBER_GROUPS = /(-?\d*\.?\d+)/g; 

     var aa = String(valueA).split(NUMBER_GROUPS), 
     bb = String(valueB).split(NUMBER_GROUPS), 
     min = Math.min(aa.length, bb.length); 

     for (var i = 0; i < min; i++) { 
     var x = parseFloat(aa[i]) || aa[i].toLowerCase(), 
      y = parseFloat(bb[i]) || bb[i].toLowerCase(); 
     if (x < y) return -1; 
     else if (x > y) return 1; 
     } 

     return 0; 
    }; 

var columnDefs = [ 
    {headerName: "Name", field: "name", width: 110, comparator: naturalSort} 

]; 


var gridOptions = { 
    columnDefs: columnDefs, 
    rowData: null, 
    enableSorting: true 
}; 
+0

根據你所做的很好的文檔,這可能是別的。要麼你的排序沒有實現correclty或其他東西使這不起作用。如果您使用angularjs,請不要忘記在使用controllerAs語法時將gridOptions綁定到$ scope對象或控制器。 – Walfrat

回答

0

正如我試圖使用比較函數所有參數顯示爲「未定義」。沒有辦法提供值進行比較或甚至節點,因爲據我所見,naturalSort函數在渲染網格時只執行一次。

對於需要進行排序的任何更改,請將自然排序函數提供完整的rowData。然後爲每一行返回您想要使用排序的值。

變種columnDefs = [ .... { 字段: 「totalIncVat」, headerName:translations.totalIncVAT, 模板:「{{data.totalIncVat |貨幣:\」 £ \ '}}', 比較:naturalSort($ scope.transactionsData) } ...... ]

//componsate/reverse template alteration to actual field for correct sorting 
var naturalSort = function(gridDataArray){ 
    _.forEach(gridDataArray, function(transaction){ 
     return gridDataArray.totalIncVat; 
    }); 
}; 

$ scope.gridOptions = _.defaults({ rowData:$ scope.gridDataArray, columnDefs:columnDefs ....});