维护一个已排序的ObservableArray

时间:2013-05-23 21:50:46

标签: javascript knockout-2.0

我希望ko.observableArray保持自己的排序顺序,其中排序顺序取决于每个项目的计算属性。

我希望这项工作:

var threads = ko.observableArray().extend({ sorted: Thread.desc });

我有一个使用扩展器的尝试jsfiddle,但是对子可观察的更改不会导致重新排序。

这是ko应该如何工作,还是我错过了一步?

编辑:原来我的依赖关系错了。即使在排序方法中调用messages,更改threads也不会将preview标记为已更改,因此当然不会对其进行排序。

仍在制定一个简洁的解决方案,通过依赖孩子来维护排序列表。

1 个答案:

答案 0 :(得分:2)

我最终选择http://jsfiddle.net/E49Y3/11/,我只保留一个单独的计算属性:

model.threads = ko.observableArray();
model.threadsDesc = ko.computed(function(){
    return model.threads().sort(Thread.desc)
});

作品!