如何"同步"使用knockout计算的两个数组?

时间:2015-09-06 23:26:19

标签: knockout.js

我的网页有两个数组 - 第一个是所有可用项目的列表,第二个是由第一个列表中的特定项目填充的过滤列表。通过单击元素并调用函数循环查找特定数据来填充第二个列表:

self.populate = function() {
    self.visibleEmails([]);
    for (var i = 0; i < self.emails().length; i++) {
        if (self.emails()[i].folder() == this.name) {
            self.visibleEmails.push(self.emails()[i]);
        }
    }
}

这样可以正常工作,但是如果我修改所有项目的主数组,我必须再次单击以重新填充第二个数组,因为它还不知道所做的任何更改。我读到如果对依赖项进行了更改,计算的observable能够更新observable,所以我想知道在这种情况下这是否可能?

要全面了解我的应用程序,您可以在此处查看:

http://jsfiddle.net/s0dhzd2t/55/

如果您查看示例,您可以看到我在尝试删除或移动项目时的含义。它在技术上有效,但您需要再次单击左侧的文件夹才能看到更改!

1 个答案:

答案 0 :(得分:1)

computed就是ko的全部内容,以及你如何使用它:

self.visibleEmails = ko.computed(function() {
    return self.emails().filter(function(e) { 
        return e.folder() == self.selectedFolder().name; 
    });
});

因为它会调用emails(),只要emails更改,就会重新评估它。

所有采用这种风格,您将获得许多好处。

http://jsfiddle.net/s0dhzd2t/57/