我有一个演示application,其中所有列表项都是可观察的。为了实现这一点,我使用了创建列表的数组上的映射插件。
this.allItems = ko.mapping.fromJS([
{name:"Annabelle"},
{name:"Vertie"},
{name:"Charles"},
{name:"John"}
]);
我的问题是 - 如何在Knockout JS中正确实现这种行为:每当observable的属性(列表中的任何项)更改时,就会执行sort函数:
this.sortList = function() {
this.allItems(this.allItems().sort(function(a, b) { return a.name() > b.name();}).slice(0, 2));
};
答案 0 :(得分:1)
首先,您需要声明一个视图模型类。然后,将allItems声明为一个可观察数组,但向用户显示一个名为sortedItems的不同成员,该成员应该是一个计算字段。此计算字段将在内部使用allItems,因此KO会注意到allItems何时更新并且还将重新计算sortedItems。
function AppViewModel() {
var self = this;
this.allItems = ko.observableArray([
{name:"Annabelle"},
{name:"Vertie"},
{name:"Charles"},
{name:"John"}
]);
this.sortedItems = ko.computed(function() {
return self.allItems().sort(sortFunction);
}, this);
}