我有一个包含 50 个项目的可观察数组,使用 foreach 绑定呈现。
我试图理解为什么每个项目呈现的模板都受到if
绑定的影响。本质上,我是基于计算的 observable 显示或隐藏我的模板的一大块。这让我觉得渲染时间增加了 70-100%(与使用visible
绑定相比)。
Ryan Niemeyer关于此主题的精彩文章表明,将计算对象绑定到if
绑定将导致所有内容在每次计算计算的任何部分更新时重新呈现。但是我的计算值在循环遍历可观察数组期间不会改变值。
this.filtersAvailable = ko.computed(function () {
return this.searchInfo.searchType() != 'invites' && this.searchInfo.searchType() != 'requests'
}, this);
为了确保它实际上没有改变,我添加了这个:
this.filtersAvailable.subscribe(function(newVal) { alert("fa" + newVal); });
this.searchInfo.searchType.subscribe(function(newVal) { alert("st" + newVal); });
也就是说,这个计算是在比我的可观察数组的单个视图模型更高的级别上定义的,并且在我的模板中的其他位置重复 调用,当然也被我的可观察数组中的每个其他项目调用。
计算出的 observable 的这种重复调用if
是否会导致绑定到它的东西重新渲染?