从这篇文章:
我首先建议您优化您的
dependentObservable
(又名computed
)。当你读取任何 observable 时,Knockout 会在 Dependency Manager 中注册一个对它的依赖...我可以在您的伪代码中看到您正在 while 循环中访问 this.ParentList() 。这意味着 registerDependency 将被调用 3000 次,并且依赖数组将被扫描 3000 次,这对 IE 不利(因为它没有内置的 Array.indexOf 方法)。
所以我的第一个建议是:在循环之前阅读所有的 observables。
考虑到这个好建议,这是我的问题:
observable
使用 ko 实用方法(如下所示)遍历数组是不是很糟糕?[假设这this.mySelectListItems()
是一个observableArray
]:
self.selectedValuesCount = ko.computed(function () {
var total = 0;
ko.utils.arrayForEach(this.mySelectListItems(), function (item) {
if (item.selected() === true) {
total += 1;
}
});
return total;
}, self);
换句话说,做以下事情有什么好处吗?
self.selectedValuesCount = ko.computed(function () {
var total = 0;
var myArray = this.mySelectListItems();
ko.utils.arrayForEach(myArray, function (item) {
if (item.selected() === true) {
total += 1;
}
});
return total;
}, self);