我试图使用Phrogz的排序,这将允许按多列排序: http://phrogz.net/JS/Array.prototype.sortBy.js
在我的情况下,我想按3列排序:
不幸的是,在我的情况下它似乎并不好用。我不知道我做错了什么。有关详细信息,请参阅jsFiddle演示:http://jsfiddle.net/csabatoth/r7VWC/24/
self.sortPersons = function() {
self.persons().sortBy(function(obj) {
var sortCfgArray = [-obj.selected()];
var srtIdx = self.sortIndex();
if (srtIdx >= 0) {
if (self.availCrit()[srtIdx].sortDir() === 0) {
sortCfgArray.push(obj.properties[srtIdx])
} else {
sortCfgArray.push(-obj.properties[srtIdx])
}
}
sortCfgArray.push(obj.lastname());
return sortCfgArray;
});
self.persons.valueHasMutated();
return true;
}
我怀疑我做错了什么。
答案 0 :(得分:1)
插件没有问题,或者你如何使用它,你的代码中只有两个(次要的)问题:
ko.observable
和ko.observableArray
是您无需任何参数即可调用基础值的函数,因此obj.properties
应为obj.properties()
您的obj.properties()
拥有PersonProperty
个对象的集合,以获取调用value
可观察函数所需的值
因此,更正的sortPersons
应如下所示:
self.sortPersons = function() {
self.persons().sortBy(function(obj) {
var sortCfgArray = [-obj.selected()];
var srtIdx = self.sortIndex();
if (srtIdx >= 0) {
if (self.availCrit()[srtIdx].sortDir() === 0) {
sortCfgArray.push(obj.properties()[srtIdx].value())
} else {
sortCfgArray.push(-obj.properties()[srtIdx].value())
}
}
sortCfgArray.push(obj.lastname());
return sortCfgArray;
});
self.persons.valueHasMutated();
return true;
}
演示JSFiddle。