次のような KnockoutJS テンプレートがあります。
<div data-bind="template: {name: 'testTemplate', data: people}"></div>
<script id="testTemplate" type="text/html">
<!--ko foreach: $data-->
<div class="items" data-bind="text: full() + ' updated at: ' + Date()"></div>
<!--/ko-->
</script>
N 回目のテストを実行した後、データが変更されていなくても、KnockoutJS は毎回テンプレートを更新するため、このようなテンプレートの作成には欠陥があることに気付きました。
これらの 2 つのフィドルを使用してこれを説明しました。
- foreach バインディングを使用する(正しく動作する)
- データバインディングを使用する(ひどく失敗する)
ご覧のとおり、最初の読み込みをパウンドするか、foreach バインディングで更新されたデータ ボタンを読み込むと、データが実際に変更されない限り、UI は再レンダリングされません。残念ながら、データ スタイル バインディングで同じことを行うと、毎回再レンダリングされます。
私は本当に違いが何であるかを理解できません。データ バインディングは foreach と同じように機能するが、テンプレート内のオブジェクトをより細かく制御できるという印象を受けました。
私がこれを使用している唯一の理由は、ネストされたテンプレートのセットがあり、手元にある実際のオブジェクトに近づく必要があるからです。私はリファクタリングしてそのアプローチから逃れることができるはずですが、なぜそれが問題なのか疑問に思っています。
<!--ko foreach:-->
foreach テンプレート バインディングが使用するのと同じパターンを尊重すべきではありませんか?