我有一个自定义排序功能,按字母数字排序。我已将其设置为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 :(得分:1)
当我尝试使用比较器功能时,所有参数都显示为“未定义”。没有办法提供比较甚至节点的值,因为据我所知,在渲染网格时,只执行一次naturalSort函数。
对于您在排序时需要进行的任何更改,请将完整的rowData提供给自然排序函数。然后,对于每一行,返回您希望使用排序的值。
var columnDefs = [{
field: "totalIncVat",
headerName: translations.totalIncVAT,
template: '<div title="{{data.totalIncVat | currency:\'£\'}}"> {{data.totalIncVat | currency:\'£\'}}</div>',
comparator: 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
});