[英]KnockoutJS custom binding scoping issue
我有一个自定义绑定,它像这样覆盖替代敲除程序的单击处理程序:
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并使其返回工作状态,而不是直接将其返回? 这是Chrome的错误还是预期的错误(以某种方式)?
在链接的代码段中,内部函数内部未访问allBindingsAccessor,因此v8只是对其进行了优化,而不添加到函数闭包中。 有关更多详细信息,请参见crbug.com/172386 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.