我试图对复杂字段进行排序,例如:
$scope.usersGrid.cols.push({id: 'loginName', field: 'customObject.loginName', sortable: true);
我必须使用以下选项才能显示' loginName'值:
$scope.usersGrid.gridOptions = {
dataItemColumnValueExtractor: getItemColumnValue
};
,功能是:
var getItemColumnValue = function(item, column) {
if(column.id === 'loginName'){
return item.customObject.loginName;
}
else {
return item[column.field];
}
};
如何让slickGrid对此列进行排序?
提前感谢:)
答案 0 :(得分:0)
确定。我找到了一个解决方案,只使用相同的'getItemColumnValue'函数进行排序:
function sortByFieldName(field, asc, sortCol) {
var column = sortCol ? sortCol : defSortCol;
if (field && asc) {
column.field = field;
column.asc = asc;
} else if (!column.field) {
return;
}
var comparer = function (a, b) {
var n = getItemColumnValue(a,column);
var m = getItemColumnValue(b,column);
var isANumber = !isNaN(parseFloat(n)) && isFinite(n);
var isBNumber = !isNaN(parseFloat(m)) && isFinite(m);
if (isANumber && isBNumber) {
var firstArg = parseFloat(n);
var secondArg = parseFloat(m);
return firstArg > secondArg ? 1 : firstArg < secondArg ? -1 : 0;
}
if (getItemColumnValue(a,column) > getItemColumnValue(b,column)) {
return 1;
} else if (getItemColumnValue(a,column) === getItemColumnValue(b,column)) {
return 0;
} else {
return -1;
}
};
dataView.sort(comparer, column.asc);
}
答案 1 :(得分:0)
var comparer = function (a, b) {
a = getItemColumnValue(a,column);
b = getItemColumnValue(b,column);
if ((!isNaN(parseFloat(a)) && isFinite(a)) && (!isNaN(parseFloat(b)) && isFinite(b))) {
a = parseFloat(a);
b = parseFloat(b);
return a > b ? 1 : (a < b ? -1 : 0);
} else {
console.error("Values given are not a number or finite.");
return false;
}
};