对可观察阵列中包含的observablearray进行排序

时间:2014-12-14 03:58:07

标签: knockout.js

我试图对可观察数组进行排序。

这个小提琴:http://jsfiddle.net/EZUEF/485/与单个observablearray很好地配合。 (单击列表项以进行排序)

但这个小提琴:http://jsfiddle.net/EZUEF/488/不起作用。它是一个包含两个对象的可观察阵列,每个对象都包含一个需要排序的可观察阵列。

我知道这一行是错误的:self.FiveFave.FItemGroup.sort(descSort);我想我可能需要使用event.currenttarget但不确定如何。

提前致谢。

1 个答案:

答案 0 :(得分:1)

你需要做这样的事情,你应该通过当前的参考进行排序。

查看:

 <ul data-bind="foreach: $parent.headers">
        <li data-bind="click: function(data,event){ $root.sorter($parent,data,event)}, text: title"></li>
    </ul>

查看型号:

 self.sorter = function(data,header, event){
        self.activeSort = header;
        var prop = self.activeSort.sortPropertyName;
        var descSort = function(a,b){ 
            return a[prop] > b[prop] ? -1 : a[prop] < b[prop] ? 1 : a[prop] == b[prop] ? 0 : 0; };
        data.FItemGroup.sort(descSort);
    };

工作小提琴here

这里最重要的重要是你应该宣布

self.FItemGroup = ko.observableArray(fItemGroup);不是self.FItemGroup = fItemGroup;

如果你不做那样的事情意味着你只是邀请一个依赖。如果您尝试对第一个循环数据进行排序,则猜测下一步会发生什么。第二个循环数据也将被排序建议小心。