Knockout.js KnockoutJS映射更新无法正确使用<--ko foreach:——>;样式装订
我有一个KnockoutJS模板,看起来像这样:Knockout.js KnockoutJS映射更新无法正确使用<--ko foreach:——>;样式装订,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,我有一个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(
<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
永远不会有效率
避免这种情况的一个简单方法是确保模板绑定不会打开您的人员
可观察页面。您可以像{myArray:people}
那样传递数据,然后在myArray
上执行foreach
以下是一个示例:您现在意识到我只是想提出一个您无法回答的问题:)。哈哈…很好的解决方案!我注意到,如果是模板绑定的包装,那么也会发生同样的情况,因此,是的,行为会类似。