Сортировка пользовательского (валютного) столбца в фоновой сетке

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

Номера поддержки Backgrid, int, date/momentjs. Не удалось найти расширение для валюты

это мой класс форматирования

formatter: _.extend({}, Backgrid.CellFormatter.prototype, {
    fromRaw: function(rawData) {
      var re = /\-/;
      if (rawData === "" || rawData == null) {
        return "";
      } else if (rawData.match(re)) {
        return "-" + accounting.formatMoney(rawData.substr(1));
      } else {
        return accounting.formatMoney(rawData);
      }
    },
    toRaw: function(formattedData) {
      return formattedData;
    }


  }),

А это моя сетка

var grid = new Backgrid.Grid({
collection: collection,
columns: [
{
  name: "cost",
  label: "Cost",
  cell: "number",
  formatter: currencyFormater 
  sortable: true
},
{
  name: "type",
  label: "Type",
  cell: Backgrid.NumberCell,
  sortable: true
}
]});

Пример данных:

{ id: 1, cost: "150", type: 3 },
{ id: 2, cost: "12516.30", type: 2 },
{ id: 3, cost: "21400.85", type: 1 },
{ id: 4, cost: "146558.50", type: 1 },
{ id: 5, cost: "139982.75", type: 1 }

person abahrani    schedule 29.01.2020    source источник
comment
Рассматривали ли вы возможность сохранить значение как число и просто показать символ валюты рядом с ним, используя псевдоэлементы css?   -  person T J    schedule 30.01.2020
comment
Привет @TJ, это было бы здорово. Но я получаю данные в виде строки, и проблема в том, что точка (доля числа) не будет отформатирована.   -  person abahrani    schedule 30.01.2020


Ответы (1)


В итоге я использовал sortValue для конкретной сортировки по значению. В моем случае я использовал parseFloat со строковым значением.

var grid = new Backgrid.Grid({
collection: collection,
columns: [
 {
   name: "cost",
   label: "Cost",
   cell: "number",
   sortValue: function(model) {
     return parseFloat(model.get("cost"));
 },
 formatter: currencyFormater 
 sortable: true
 },
 …
]});
person abahrani    schedule 31.01.2020