数据:
16点 19.99 小时 210.46小时 262.54小时 303.19 小时 55.95 小时 60.07 小时 64.07 小时 7.95 小时
我想要什么:
我需要允许在 koGrid 中对这一数据进行排序(默认功能是通过单击网格标题、升序或降序排序)。
问题:
数据是字符串,因此您可能会猜测它是如何通过字符代码排序的。 我有什么选择?我发现一列可以分配 sortFn,我猜是这样的?
代码:
this.gridOptions = {
canSelectRows: false,
showColumnMenu: false,
showFilter: false,
columnDefs: [
{ field: 'localizedName', displayName: 'Name' },
{
field: 'localizedDuration', displayName: 'Duration',
sortFn: function (itemA: string, itemB: string) {
var numA = parseFloat(itemA);
var numB = parseFloat(itemB);
if (!numA && !numB)
return 0;
else if (!itemA && (itemA === undefined || itemA === null))
return 1;
else if (!itemB && (itemB === undefined || itemB === null))
return -1;
if (numA > numB)
return -1;
else if (numA < numB)
return 1;
return 0;
}
},
],
data: this.dataRows
};
fiddle : JSFiddle
最佳答案
尝试像这样修改你的代码
查看:
<div data-bind="koGrid: gridOptions"></div>
View 模型:
vm = function () {
var self = this;
self.myData = ko.observable([{
hours: '113.02 hours'
}, {
hours: '13.01 hours'
}, {
hours: '303.01 hours'
}, {
hours: '33.01 hours'
}]);
self.gridOptions = {
data: self.myData,
columnDefs: [{
field: 'hours',
displayName: 'hours',
sortFn(a, b) {
if (!(a && b)) {
return -1;
}
var a1 = parseFloat(a.split(' ')[0]);
var b1 = parseFloat(b.split(' ')[0]);
if (a1 > b1) return 1;
if (a1 < b1) return -1;
if (a1 = b1) return 0;
}
}]
};
};
ko.applyBindings(new vm);
工作 fiddle here
提供引用文档 here
关于javascript - 如何为koGrid实现自定义排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30795489/