光滑网格 - 对复杂对象进行排序

slick grid - sort complex object

本文关键字:对象 排序 复杂 网格      更新时间:2023-09-26

我正在尝试对复杂字段进行排序,例如:

$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 对此列进行排序?

提前致谢:)

好的。我找到了一个解决方案,只是使用相同的"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);
    }
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;
  }
};