我有一个自定义绑定,它会覆盖knockout的点击处理程序,如下所示:
var originalInit = ko.bindingHandlers.click.init,
originalUpdate = ko.bindingHandlers.click.update;
ko.bindingHandlers.click = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel, context) {
var wrappedValueAccessor = function() {
return function(data, event) {
var disabled = allBindingsAccessor.get('disabled');
var clickResult = valueAccessor().call(viewModel, data, event);
if (clickResult && typeof clickResult.always === "function") {
$(element).attr('disabled','disabled');
clickResult.always(function(){
$(element).removeAttr('disabled');
});
}
};
};
originalInit(element, wrappedValueAccessor, allBindingsAccessor, viewModel, context);
},
update: originalUpdate
};
在此处找到小提琴:http://jsfiddle.net/92q5vgfp/
问题是当我尝试在chrome调试器中点击内部访问allBindingsAccessor时,它不可用。
但是,如果我有一个console.log(allBindingsAccessor),chrome的调试器就可以看到它。
更新所以,在我写这篇文章时,我们尝试了一个随机的东西,即在返回之前将函数分配给变量。那很有效。不知道为什么或如何。
var wrappedValueAccessor = function() {
var test = function(data, event) {
...
};
return test;
};
所以这是我的问题,为什么将函数分配给本地var并返回它工作但不直接返回它?这是铬或预期的错误(不知何故)?
答案 0 :(得分:0)
在链接的代码段中,不会在内部函数内部访问allBindingsAccessor,因此v8只是将其优化出来并且不会添加到函数闭包中。有关详细信息,请参阅crbug.com/172386。