首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链表的Knockout.js 'foreach‘绑定

问链表的Knockout.js 'foreach‘绑定
EN

Stack Overflow用户
提问于 2012-08-08 23:36:42
回答 2查看 600关注 0票数 2

好奇的是,如何创建一个“foreach”绑定来迭代链表,就像当前的“foreach”绑定迭代数组一样?

我已经创建了a jsFiddle for tinkering。

我认为链表对于Knockout.js来说可能是一种有用的习惯用法。特别是,如果处理得当,DOM将只更新正在添加/删除的元素(即,当添加/删除元素时,整个列表不会更新),并且添加/删除到列表中间的复杂度为O(1),而数组的复杂度为O(n)。

EN

回答 2

Stack Overflow用户

发布于 2012-08-20 19:26:17

基于数组的foreach已经有了很好的性能;DOM元素只有在必要时才会被添加/删除;当然,整个Array都会被扫描更改,但速度非常快(ko只有数组的粗略更改信号)。由于所使用的距离算法,随机插入或删除的速度很快。

票数 1
EN

Stack Overflow用户

发布于 2012-08-13 21:08:26

这是一个很好的想法,但不幸的是,我认为这是不可能的。

您必须为列表的头部订阅可观测对象,并为每个元素订阅“下一个”可观测对象。

问题是,除非你能说出哪个观察点触发了变化,否则你不会获得任何优势。如果您编辑列表中间的内容,那么重点是foreach绑定需要能够更新DOM的这一部分,而不必迭代整个结构。绑定目前不允许这样做--如果一个绑定订阅了多个可观察对象,那么当它们中的任何一个发生变化时,它的update方法都会被调用,而不需要知道它们中的哪个发生了变化。

此外,即使这可以工作,所有那些额外的ko.observable()结构和订阅也将是相当严重的开销。三个可观察值,而不是只有另一个数组元素。

为了避免对DOM进行不必要的更改,您可以将新的结构与旧的结构进行比较,并只做相关的更改,但这可以在使用数组时完成(我不认为内置的foreach绑定会进行这种优化)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11868121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档