Сортировка по фоновой сетке с неопределенными значениями

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

onClick: функция (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;
    });
  }
}

},

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

onClick: функция (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 === 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;
    });
  }
}

},

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


person curious    schedule 31.01.2014    source источник


Ответы (1)


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

person curious    schedule 31.01.2014