2

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

我创建了一个 jsFiddle 用于修补

我认为链表可能是与 Knockout.js 一起使用的有用习惯用法。特别是,如果操作正确,DOM 只会更新正在添加/删除的元素(即,添加/删除元素时不会更新整个列表),并且添加/删除到列表中间的复杂性为O(1),而数组的 O(n)。

4

2 回答 2

1

基于数组的 foreach 已经非常高效了;DOM 元素仅在必要时添加/删除;当然,会扫描整个阵列的变化,但速度非常快(ko 只有阵列的粗略变化信号)。由于使用了距离算法,随机插入或删除速度很快。

于 2012-08-20T11:26:17.057 回答
0

这是一个好主意,但不幸的是我认为这是不可能的。

您必须订阅列表头部的可观察对象和每个元素的“下一个”可观察对象。

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

此外,即使这可行,所有这些额外的 ko.observable() 结构和订阅也将是相当严重的开销。三个 observables 而不仅仅是另一个数组元素。

为了避免对 DOM 进行不必要的更改,您可以将新结构与旧结构进行比较,然后进行相关更改,但是无论如何在使用数组时都可以这样做(我认为内置的 foreach 绑定不会进行这种优化)。

于 2012-08-13T13:08:26.323 回答