2014-01-31 2 views
0

Я использую Backgrid. Я обнаружил, что один из моих столбцов имеет значение «undefined». Сортировка backgrid работает некорректно, если в столбце не указано. Я просмотрел исходный код.Сортировка на основе backgrid с неопределенными значениями

onClick: function (e) { e.preventDefault();

var columnName = this.column.get("name"); 

if (this.column.get("sortable")) { 
    if (this.direction() === "ascending") { 
    this.sort(columnName, "descending", function (left, right) { 
     var leftVal = left.get(columnName); 
     var rightVal = right.get(columnName); 
     if (leftVal === rightVal) { 
     return 0; 
     } 
     else if (leftVal > rightVal) { return -1; } 
     return 1; 
    }); 
    } 
    else if (this.direction() === "descending") { 
    this.sort(columnName, null); 
    } 
    else { 
    this.sort(columnName, "ascending", function (left, right) { 
     var leftVal = left.get(columnName); 
     var rightVal = right.get(columnName); 
     if (leftVal === rightVal) { 
     return 0; 
     } 
     else if (leftVal < rightVal) { return -1; } 
     return 1; 
    }); 
    } 
} 

},

Я изменил код ниже и сортировка работает правильно (предположим, что не определено меньше, чем любое значение):

OnClick: функция (е) { e.preventDefault ();

var columnName = this.column.get("name"); 

if (this.column.get("sortable")) { 
    if (this.direction() === "ascending") { 
    this.sort(columnName, "descending", function (left, right) { 
     var leftVal = left.get(columnName); 
     var rightVal = right.get(columnName); 
     if (leftVal === undefined && rightVal != undefined) { 
     return 1; 
     } 
     if (leftVal != undefined && rightVal === undefined) { 
     return -1; 
     } 
     if (leftVal === rightVal) { 
     return 0; 
     } 
     else if (leftVal > rightVal) { return -1; } 
     return 1; 
    }); 
    } 
    else if (this.direction() === "descending") { 
    this.sort(columnName, null); 
    } 
    else { 
    this.sort(columnName, "ascending", function (left, right) { 
     var leftVal = left.get(columnName); 
     var rightVal = right.get(columnName); 
     if (leftVal === undefined && rightVal != undefined) { 
     return -1; 
     } 
     if (leftVal != undefined && rightVal === undefined) { 
     return 1; 
     } 
     if (leftVal === rightVal) { 
     return 0; 
     } 
     else if (leftVal < rightVal) { return -1; } 
     return 1; 
    }); 
    } 
} 

},

Есть ли другой способ иметь дело с неопределенным значением при сортировке? Благодаря!

ответ

0

На самом деле, я обновил свой backgrid до последней версии 0.3.5, которая поддерживает свойство sortValue для Backgrid. Колонка: http://wyuenho.github.io/backgrid/api/index.html#!/api/Backgrid.Column-cfg-defaults. Я могу определить функцию, чтобы вернуть пустую строку для неопределенного значения столбца, чтобы корректно выполнить сортировку. Это решит мою проблему.