【问题标题】:Knockout 3.5.0 arrayChange淘汰赛 3.5.0 arrayChange
【发布时间】:2019-12-24 06:31:11
【问题描述】:

我一直面临一些关于“foreach”绑定到 ko.observableArray 以进行淘汰赛的问题,特别是淘汰赛 3.5.0。 “foreach”绑定在 UI 端创建 2 个元素,而在当前数据上下文中,我在 observableArray 中只有一个对象。我将其绑定如下:

<!-- ko foreach: { data: $root.(...my own javascript function)') } -->
...
<!-- /ko -->

我在这里做的是通过在 observableArray 上调用 .push() 手动将新条目添加到空的 observableArray 中。该条目已成功添加到 observableArray,但是即使我只将一个条目推入 observableArray,它也会显示 2 个 UI 元素而不是一个。

但是,如果我设置属性“includeDestroyed: false”,似乎问题就会消失。

根据我收集到的信息,Knockout 3.5.0 中有一些与 foreach 绑定的实现相关的更改在淘汰赛中被更改。 “arrayChange”的实现发生了变化,它可以检测出可观察到的剔除数组中的任何变化。

我想知道的是“arrayChange”事件期间发生的确切流程,有什么方法可以找出一个空的 observableArray 如何处理“push”函数

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    从官方 Knockout github 页面查看发布更改日志时,您可以发现以下内容:

    当数组更改来自已知的单个 操作,如push,foreach绑定不再过滤掉 默认情况下销毁的项目。关闭它并过滤掉被破坏的 项目,您可以在 foreach 绑定中设置 includeDestroyed: false 或 设置 ko.options.foreachHidesDestroyed = true 使用前一个 默认行为。

    所以你可以全局设置“ko.options”,或者像你一样设置标志。

    有关更多信息,您可以查看here。 至于事件的流程,我建议查看 ko 3.5 的调试版本,以及调试器和咖啡!

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 2013-02-04
      • 2012-02-18
      • 2013-04-28
      • 2013-04-09
      • 2012-06-06
      • 2015-06-02
      • 2013-12-18
      相关资源
      最近更新 更多