Как отсортировать dojo dgrid как строки, а не как строки
В dojo dgrid у меня есть столбец с плавающей точкой, который я хочу отсортировать. Я нашел этот образец инструкции от Кена Франкеиро из SitePen по сортировке по адресу https://github.com/SitePen/dgrid/issues/276.
grid.set("sort", function(a,b) {
if(a.col5 > b.col5) { return 1; }
if(a.col5 < b.col5) { return -1 }
return 0;
});
Поскольку я хочу сортировать их как поплавки, я внес это изменение.
grid.set("sort", function(a,b) {
var first = parseFloat(a.col5);
var second = parseFloat(b.col5);
if (first > second) { return 1; }
if (first < second) { return -1 }
return 0;
});
Тем не менее, он все еще сортирует их как строки с таким результатом: -0.11 -7.15 0.12 1.25 10.9 2.02
Я на самом деле не уверен, что это вызывает мою функцию; dojo не всегда разрешает точки останова в похожем коде. Поэтому я изменил его и создал функцию сравнения MyFloats(a,b) с кодом компаратора и вызвал его из моего кода grid.set. Я не смог остановиться на точке останова в моей функции.
Следовательно, как правильно сортировать поплавки в столбце?
1 ответ
То, что вы описали полностью, похоже, работает для меня.
Однако если предполагается, что ваши данные будут обрабатываться как числа, в идеале я бы рекомендовал выводить их как таковые, а не строки.
Между тем, RE "Dojo не всегда допускает точки останова", единственное, о чем я могу подумать, вы можете ссылаться на миниатюрную версию Dojo, но все последние версии Dojo поддерживают исходные карты, которые по-прежнему должны позволять вам чтобы увидеть унифицированный код и точку останова в инструментах разработчика браузеров.
Скрипка, на которую я ссылаюсь, в значительной степени использует именно то, что написано в оригинальном посте, но ТАК заставляет меня предоставлять встроенный код для сопровождения JSFiddle, так что вот оно.
var grid = new OnDemandGrid({
columns: {
id: 'ID',
value: 'Value'
},
collection: new Memory({ data: [
{ id: 1, value: '-0.11' },
{ id: 2, value: '-7.15' },
{ id: 3, value: '0.12' },
{ id: 4, value: '1.25' },
{ id: 5, value: '10.9' },
{ id: 6, value: '2.02' }
] }),
sort: function (a, b) {
var first = parseFloat(a.value);
var second = parseFloat(b.value);
if (first > second) {
return 1;
}
if (first < second) {
return -1;
}
return 0;
}
}, 'grid');