我有一个看起来像这样的 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 每次都会更新模板,即使数据没有改变。
我已经使用这两个小提琴来说明这一点:
- 使用 foreach 绑定(正常工作)
- 使用数据绑定(非常失败)
如您所见,如果您在 foreach 绑定上点击初始加载或加载更新的数据按钮,除非数据实际更改,否则 UI 永远不会重新渲染。不幸的是,如果您对数据样式绑定执行相同操作,则每次都会重新渲染。
我真的无法弄清楚有什么区别。我的印象是数据绑定的工作方式与 foreach 相同,但允许对模板内的对象进行更多控制。
我使用它的唯一原因是因为我有一组嵌套模板,并且我需要更接近手头的实际对象。我应该能够重新考虑,并摆脱这种方法,但我仍然想知道为什么这是一个问题。
不应该<!--ko foreach:-->
尊重 foreach 模板绑定使用的相同模式吗?