我的网页有两个数组 - 第一个是所有可用项目的列表,第二个是由第一个列表中的特定项目填充的过滤列表。通过单击元素并调用函数循环查找特定数据来填充第二个列表:
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/
如果您查看示例,您可以看到我在尝试删除或移动项目时的含义。它在技术上有效,但您需要再次单击左侧的文件夹才能看到更改!
答案 0 :(得分:1)
computed
就是ko的全部内容,以及你如何使用它:
self.visibleEmails = ko.computed(function() {
return self.emails().filter(function(e) {
return e.folder() == self.selectedFolder().name;
});
});
因为它会调用emails()
,只要emails
更改,就会重新评估它。
为所有采用这种风格,您将获得许多好处。