【发布时间】:2012-01-07 02:06:10
【问题描述】:
当我在 ko.applyBindings(); 之后将任何新元素注入 DOM 时;被调用,则淘汰赛将无法识别这些新元素。 我可以理解为什么会发生这种情况 - 它们只是没有被淘汰赛索引。
所以,起初我认为这可以通过再次调用 ko.applyBindings() 来解决,在添加我的新元素之后,但后来我意识到,对于你进行的每个 ko.applyBindings() 调用,相应的事件都会被触发多次。所以在应用五次之后,一个 click: 绑定会被触发五次,所以这不是一个理想的解决方案;)
有没有类似 ko.updateBindings() 之类的东西来告诉淘汰赛,嗯...更新元素绑定?
问候, 克里斯
【问题讨论】:
-
你能发布一些代码来展示你在做什么吗?
-
好吧,例如这样的: $('body').append('点我! ');
-
我不确定这是否足以提供有用的答案。我了解您要做什么,但是通过更全面地了解您的代码(为什么/何时注入新的 DOM 元素),很难用最好的方法来解决这个问题。在查看您当前的解决方案之后,可能有人可以指出一种不必注入新元素的方法,或者为您尝试做的事情提供解决方法。
-
好像找到了。只需调用: ko.applyBindings(viewModel);再次将所有函数再次绑定到整个 DOM。这就是原因,在重新调用此函数后,每个回调都会被调用两次甚至更多。 applyBindings() 的第二个参数是开始应用的 DOM 节点。这默认为 DOM 根。因此,如果您要“手动”将几个具有数据绑定属性的元素添加到某个 DOM 节点,请使用新元素获取对 DOM 节点的引用并将其作为第二个参数传递!
-
太棒了!我忘记了 applyBindings() 的第二个参数。