我面临的问题是,添加新项目时,计算的observable数组不会更新.
self.FilteredCityList = ko.computed(function() {
var filteredCollection = ko.utils.arrayFilter(self.CityListCollection(), function(r) {
var matchingItem = ko.utils.arrayFilter(self.LocationCollection(), function(r1) {
return r1.LocationCode() == r.LocationCode();
});
if (matchingItem.length > 0) {
return false;
}
return true;
});
return filteredCollection;
}, this);
Run Code Online (Sandbox Code Playgroud)
当我在self.LocationCollection()计算数组中添加项目时,不会更新.
nem*_*esv 10
您在评论中提到过您使用以下代码将项目添加到您LocationCollection的问题中:
self.LocationCollection().push(item);
Run Code Online (Sandbox Code Playgroud)
哪里
self.LocationCollection = ko.observableArray();
Run Code Online (Sandbox Code Playgroud)
为了使淘汰赛的变动追踪你需要调用push上observableArray直接(如无括号()),如文档中描述:
self.LocationCollection.push(item);
Run Code Online (Sandbox Code Playgroud)
但有什么区别?
该ko.observableArray()调用将返回一个函数.要获取底层数组,您需要调用此函数(例如self.LocationCollection()),该函数返回存储的数组.
此时,当您调用时,LocationCollection().push(item)您将调用push底层数组,因此knockout将无法知道它并且它不会触发您的计算可观察量.
这就是为什么在淘汰赛他们定义自己push的方法observableArray本身,你需要什么样的语法来调用LocationCollection.push(item),并因为它的基因敲除的方法将正确地跟踪变化.
| 归档时间: |
|
| 查看次数: |
3920 次 |
| 最近记录: |