好奇的是,如何创建一个“foreach”绑定来迭代链表,就像当前的“foreach”绑定迭代数组一样?
我已经创建了a jsFiddle for tinkering。
我认为链表对于Knockout.js来说可能是一种有用的习惯用法。特别是,如果处理得当,DOM将只更新正在添加/删除的元素(即,当添加/删除元素时,整个列表不会更新),并且添加/删除到列表中间的复杂度为O(1),而数组的复杂度为O(n)。
发布于 2012-08-20 19:26:17
基于数组的foreach已经有了很好的性能;DOM元素只有在必要时才会被添加/删除;当然,整个Array都会被扫描更改,但速度非常快(ko只有数组的粗略更改信号)。由于所使用的距离算法,随机插入或删除的速度很快。
发布于 2012-08-13 21:08:26
这是一个很好的想法,但不幸的是,我认为这是不可能的。
您必须为列表的头部订阅可观测对象,并为每个元素订阅“下一个”可观测对象。
问题是,除非你能说出哪个观察点触发了变化,否则你不会获得任何优势。如果您编辑列表中间的内容,那么重点是foreach绑定需要能够更新DOM的这一部分,而不必迭代整个结构。绑定目前不允许这样做--如果一个绑定订阅了多个可观察对象,那么当它们中的任何一个发生变化时,它的update方法都会被调用,而不需要知道它们中的哪个发生了变化。
此外,即使这可以工作,所有那些额外的ko.observable()结构和订阅也将是相当严重的开销。三个可观察值,而不是只有另一个数组元素。
为了避免对DOM进行不必要的更改,您可以将新的结构与旧的结构进行比较,并只做相关的更改,但这可以在使用数组时完成(我不认为内置的foreach绑定会进行这种优化)。
https://stackoverflow.com/questions/11868121
复制相似问题