【发布时间】:2014-10-25 00:45:09
【问题描述】:
在我所有的淘汰自定义绑定处理程序中,我总是忽略更新回调。我的理由是我可以在 init 回调中完成所有我需要做的工作。在那里,我可以创建计算的,调用 applyBindingsToNode(如果我需要)或设置手动订阅 subscribables 并在这些订阅中进行我的 DOM 操作。
我担心的是,knout 中的默认绑定仅使用更新回调构建。(更新:不再是,value 和其他一些绑定现在只使用 init)在 init 回调中完成所有工作有什么缺点吗?有什么我想念的吗?谢谢!
【问题讨论】:
-
这样做没有问题,3.0之后的一些内置绑定现在使用那个结构(
with,if,和ifnot在3.1和value例如,在 3.2 中)。记得清理一下:knockmeout.net/2014/10/knockout-cleaning-up.html -
谢谢瑞恩,感谢您的回答!我一直想深入研究代码以确定 KO 是如何决定调用更新回调的。我猜它只是查看在 init 回调中观察到的内容。对我来说,我更喜欢对何时调用更新进行非常精细的控制。此外,大多数时候我的自定义绑定处理程序只是清理大量内置绑定。在这些情况下,我最终还是使用了 applyBindingsToNode,而这只能在 init 中完成。
-
yes-
update被包装在一个计算中,因此它跟踪在执行时访问的依赖项。因此,如果可以创建自己的计算来获得更大的控制权。只需传递disposeWhenNodeIsRemoved: element选项和/或使用ko.utils.domNodeDisposal.addDisposeCallback(至少需要处理任何手动订阅)。 -
谢谢,我已经使用
addDisposeCallback很长时间了。我从来没有见过任何关于 disposeWhenNodeIsRemoved 的东西,我现在就去看看吧 -
在这里找到关于 disposeWhenNodeIsRemoved 的信息 knockmeout.net/2012/06/… :)
标签: knockout.js custom-binding