2016-11-01 2 views
3

У меня есть специальная функция сортировки для преобразования строк в числа для одного столбца в сетке. Другие столбцы состоят из строк или значений даты. У меня есть специальная функция сортировки, которая проверяет номер столбца и выполняет преобразование, но для других значений я хочу поведение компаратора по умолчанию. Как мне это достичь?Angularjs orderBy: как вызвать компаратор по умолчанию из пользовательской функции сортировки

$scope.sort = function (keyname) { 
 
    $scope.sortKey = keyname; 
 
    $scope.reverse = !$scope.reverse; 
 
}; 
 

 

 
$scope.sortSubGrid = function (a, b) { 
 
    if ($scope.sortKey === 'caseNumber') { 
 
    return = parseInt(b.value) -parseInt(a.value); 
 
    } 
 
    else { 
 
    return = a.value > b.value; 
 
    } 
 
};
<tr dir-paginate="agreement in agreements|orderBy:sortKey:reverse:sortSubGrid" ...>

Вторая половина функции sortSubGrid предназначена для сортировки нецифровых столбцов, но не достижение результатов я ожидаю, что это просто результаты сравнения по умолчанию предоставляет. Как получить поведение по умолчанию для этого второго предложения?

ответ

0

В соответствии с кодом, указанным в ordeBy.js, вы можете использовать либо по умолчанию, либо как пользовательский, но не оба, как вы описали, однако это была бы хорошая функциональность.

// Define the `compare()` function. Use a default comparator if none is specified. 
var compare = isFunction(compareFn) ? compareFn : defaultCompare; 

Таким образом, вы всегда можете получить исходный код по умолчанию и изменить его.

// source orderBy.js 
function defaultCompare(v1, v2) { 
    var result = 0; 
    var type1 = v1.type; 
    var type2 = v2.type; 

    if (type1 === type2) { 
    var value1 = v1.value; 
    var value2 = v2.value; 

    if (type1 === 'string') { 
     // Compare strings case-insensitively 
     value1 = value1.toLowerCase(); 
     value2 = value2.toLowerCase(); 
    } else if (type1 === 'object') { 
     // For basic objects, use the position of the object 
     // in the collection instead of the value 
     if (isObject(value1)) value1 = v1.index; 
     if (isObject(value2)) value2 = v2.index; 
    } 

    if (value1 !== value2) { 
     result = value1 < value2 ? -1 : 1; 
    } 
    } else { 
    result = type1 < type2 ? -1 : 1; 
    } 

    return result; 
} 
Смежные вопросы