只要Knockout JS中的observable属性发生变化,就执行一个函数

时间:2017-06-04 12:20:38

标签: javascript knockout.js

我有一个演示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));
};

1 个答案:

答案 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);
}