光滑的网格 - 排序复杂的对象

时间:2016-01-31 09:24:34

标签: javascript angularjs slickgrid

我试图对复杂字段进行排序,例如:

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

提前感谢:)

2 个答案:

答案 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;
  }
};