Knockout.js'foreach'绑定链表

时间:2012-08-08 15:36:42

标签: knockout.js knockout-2.0

只是好奇,如何创建一个'foreach'绑定,以当前'foreach'绑定迭代数组的方式迭代链表?

我创建了a jsFiddle for tinkering

我认为链接列表可能是与Knockout.js一起使用的有用习惯用法。特别是,如果完成,DOM将仅更新正在添加/删除的元素(即,添加/删除元素时不更新整个列表),并且添加/删除列表中间的复杂性O(1),相对于数组的O(n)。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

您必须订阅列表头部的observable和每个元素的“next”observable。

问题是除非你能分辨出哪一个观察者触发了这一变化,否则你不会获得任何好处。如果您在列表中间编辑某些内容,那么foreach绑定需要能够更新DOM的那一部分,而不必迭代整个结构。绑定当前不允许这样 - 如果绑定订阅了多个observable,如果其中任何一个更改,将调用其update方法,而不知道它们中的哪个更改。

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

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

相关问题