KnockoutJS自定义绑定作用域问题
KnockoutJS custom binding scoping issue
我有一个自定义绑定,覆盖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/
问题是,当我试图访问allBindingsAccessor点击从chrome调试器,它是不可用的。
但是,如果我有一个console.log(allBindingsAccessor), chrome的调试器可以看到它。
Update所以,当我写这篇文章的时候,我们尝试了一个随机的事情,那就是在返回它之前将函数分配给一个变量。这工作。不知道为什么,也不知道怎么回事。
var wrappedValueAccessor = function() {
var test = function(data, event) {
...
};
return test;
};
所以这是我的问题,为什么将函数分配给局部变量并返回它的工作,但不直接返回它?这是一个bug在chrome或预期(不知何故)?
在链接的代码段中,没有在内部函数中访问allBindingsAccessor,因此v8只是将其优化出来,而不添加到函数闭包中。详见crbug.com/172386
相关文章:
- AngularJS$作用域在选项卡集中出现问题
- 作用域问题-此函数是否形成闭包-JavaScript
- 访问Javascript对象-Node.js的作用域问题
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- “this”和内部作用域命名函数的打字稿问题
- 'simple'套接字中的作用域问题.IO服务器
- 我对按钮的作用域有问题'的听众
- Javascript作用域问题,对象在分配后没有数据
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- 可能存在Javascript作用域问题
- 本地Javascript作用域问题
- 设置Javascript函数的作用域问题
- AngularJS:图片上传+文件阅读器预览.控制器、指令和作用域之间的绑定出现问题
- 作用域和将参数传递给动态创建的事件处理程序时出现问题
- 达到 10 次摘要迭代,中止(作用域函数问题)
- Javascript 中使用 setTimeout 的作用域问题
- 作用域问题反应父子方法ES6
- jquery get中的作用域问题
- 当输入具有带作用域的指令时,Angularjs绑定会出现问题
- 绑定时出现Javascript作用域问题