foreach バインディングでレンダリングされた、50 個のアイテムを含む監視可能な配列があります。
if
各アイテムがレンダリングするテンプレートがバインドに苦しんでいる理由を理解しようとしています。基本的に、計算されたオブザーバブルに基づいて、テンプレートの大部分を表示または非表示にしています。これにより、レンダリング時間が 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); });
そうは言っても、この計算は、監視可能な配列の個々のビュー モデルよりも高いレベルで定義されており、テンプレートの他の場所と、もちろん監視可能な配列の他のすべての項目の両方で繰り返し 呼び出されます。
計算されたオブザーバブルをこのように繰り返し呼び出すif
と、再レンダリングへのバインディングでそれにバインドされたものが発生しますか?