【发布时间】:2014-08-18 01:19:39
【问题描述】:
有没有办法在 ko 中监听applyBindings 事件?
我已经搜索了 google 和 SO,但找不到方法。答案需要得到支持,即不调用将来可能被 KO 开发人员更改的内部函数。
下面的question不类似,因为它询问如何检查 applyBindings 是否已被调用。我想知道什么时候调用它。
【问题讨论】:
有没有办法在 ko 中监听applyBindings 事件?
我已经搜索了 google 和 SO,但找不到方法。答案需要得到支持,即不调用将来可能被 KO 开发人员更改的内部函数。
下面的question不类似,因为它询问如何检查 applyBindings 是否已被调用。我想知道什么时候调用它。
【问题讨论】:
在 JavaScript 中,拦截任何方法调用都非常容易,因为您只需修改对象即可。因此,您可以将ko.applyBindings 替换为您自己的函数,该函数可以执行您想要的任何操作(在调用原始函数之前或之后):
ko.applyBindings = (function(original) {
return function () {
original.apply(this, arguments);
alert('ko.applyBindings called');
};
})(ko.applyBindings);
http://jsfiddle.net/mbest/4a2vK/
注意:此方法在 Knockout 的调试版本和发布版本之间的行为会有所不同。 Knockout 内部使用ko.applyBindings 绑定template,在使用发布版本时,它总是会调用内部的ko.applyBindings 函数,而在调试版本中,它会调用我们的替换函数。
【讨论】: