我遇到了一些关于将“foreach”绑定到ko.observableArray以进行knockout的问题,特别是knockout 3.5.0。“foreach”绑定在U.I端创建了2个元素,而在当前数据上下文中,我在observableArray中只有一个对象。我将其绑定如下:
<!-- ko foreach: { data: $root.(...my own javascript function)') } -->
...
<!-- /ko -->
我在这里所做的是,通过在observableArray上调用.push(),手动将一个新条目添加到一个空的observableArray中。该条目已成功添加到observableArray中,但它将显示2个UI元素,而不是一个,即使我只将一个条目推入到observableArray中。
但是,如果我将属性“includeDestroyed:false”,问题似乎就会消失。
从我所收集的信息来看,Knockout 3.5.0中有一些变化,这些变化与foreach绑定的实现在knockout中的变化有关。“arrayChange”的实现也有变化,它检测knockout可观察数组中的任何变化。
我想知道的是在“arrayChange”事件期间发生的事情的确切流程,以及是否有任何方法可以找出空的observableArray如何处理“push”函数
1条答案
按热度按时间oknwwptz1#
在Knockout github的官方页面中,查看版本更改日志时,您可以看到以下内容:
当数组更改来自已知的单个操作(如push)时,为了提高性能,foreach绑定在默认情况下不再筛选出已破坏的项。要关闭此功能并筛选出已破坏的项,可以设置includeDestroyed:在foreach系结中设定false,或设定ko.options.foreachHidesDestroyed = true,以预设使用先前的行为。
因此,您可以将“ko.options”设置为全局,也可以像您一样设置标志。
更多的信息你可以查看here。至于事件的流程,我建议查看ko3.5的调试版本,沿着调试器和coffe!