【问题标题】:Knockout.js 3.4.1 throws multiple bindings errorKnockout.js 3.4.1 抛出多个绑定错误
【发布时间】:2017-06-27 07:54:58
【问题描述】:

我正在做一个相当大的项目,我在其中使用 KnockoutJS(很大,因为不可能在此处发布所有相关代码),今天我从 Knockout 3.4.0 升级到 3.4.1。执行此操作后,我突然在每次页面加载时遇到多个绑定错误(“您不能将绑定多次应用于同一元素”)。

我使用 Knockout 已经有一段时间了,我非常有信心我不会对同一个元素多次应用绑定。我只调用了一次 applybindings,并且我通过调试该代码(并且还搜索此函数的任何其他实例)确认该语句也只运行一次。

在调试了这个问题一段时间后,我决定再次降级,到 Knockout 3.4.0。事实证明,该错误仅出现在最新版本 3.4.1 上。

还有其他人注意到这种行为吗?他们做了什么改变导致了这种情况?

即使我运行 KO 的调试版本,错误也无法告诉我它指的是什么元素,这使得弄清楚错误的实际来源是无望的。

我也在调用applybindings(没有特定的元素目标)时使用第二个可选参数,因为无论如何我只这样做了一次。

【问题讨论】:

  • 需要更新到最新版本吗?
  • 在发行说明中看不到任何相关内容 (github.com/knockout/knockout/releases/tag/v3.4.1) 您确定无法在简化示例中重现该问题吗?是否与 with 绑定的更改有关? github.com/knockout/knockout/pull/1415
  • 是的,请尝试在最小示例中重现错误
  • 如果您使用 Knockout 的调试版本,请在引发错误的代码中放置一个断点(第 3247 行)。然后,您可以使用调试器查看它所在的元素以及到达那里所经过的路径。
  • 如果这是由 Knockout 3.4.1 中的错误引起的,最好追踪它并在下一个版本中修复它。

标签: javascript knockout.js


【解决方案1】:

在您提出问题 5 个月后,有人在其 Github page 上提出了相同问题的问题。已修复 here

Brian M Hunt(业主之一)的评论:

问题是需要调用valueAccessor()(如果它是一个函数)来创建依赖项。我相信我在 TKO 中有正确的修复(基本上是在渲染循环中的 if (typeof valueAccessor() === 'function') {valueAccessor()()}),但是 TKO 修复不会直接反向移植/翻译,因为它使用了新的绑定类样式。

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多