为什么Phrogz多列排序在我的情况下不起作用

时间:2014-06-30 18:30:41

标签: javascript jquery knockout.js

我试图使用Phrogz的排序,这将允许按多列排序: http://phrogz.net/JS/Array.prototype.sortBy.js

在我的情况下,我想按3列排序:

  1. 选择:所选项目应始终位于网格顶部
  2. 用户可选择的一个属性
  3. 姓氏
  4. 不幸的是,在我的情况下它似乎并不好用。我不知道我做错了什么。有关详细信息,请参阅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;
    }
    

    我怀疑我做错了什么。

1 个答案:

答案 0 :(得分:1)

插件没有问题,或者你如何使用它,你的代码中只有两个(次要的)问题:

  • ko.observableko.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