Javascript 下划线bindAll:保留';这';上下文
当调用Javascript 下划线bindAll:保留';这';上下文,javascript,this,underscore.js,Javascript,This,Underscore.js,当调用onSubmit时,我在试图将uploader保存为此上下文时遇到问题。任何JS大师都能帮忙吗 uploader: { init: function(){ var that = this; var fileUploader = new Uploader.FileUploaderBasic({ button : $("#upload-btn")[0],
onSubmit
时,我在试图将uploader
保存为此
上下文时遇到问题。任何JS大师都能帮忙吗
uploader: {
init: function(){
var that = this;
var fileUploader = new Uploader.FileUploaderBasic({
button : $("#upload-btn")[0],
action : "/filesCollection",
onSubmit : that.onSubmit
});
_.bindAll(this, this.onSubmit); // attempting to bind 'this'
},
onSubmit: function(id, fileName){
console.log(this); // still refers to 'fileUploader' object :(
}
}
导致以下错误:
Uncaught TypeError: Cannot read property 'bind' of undefined
示例:通过使用
调用
或应用
可以为任何函数指定此
的上下文。这应该可以做到(在fileUploader声明中):
编辑:更新的JSFIDLE:问题已解决:
我发现了几件重要的事情:
Uncaught TypeError: Cannot read property 'bind' of undefined
\uuu0.bindAll()
此
this
),并且必须是字符串形式强>this
)中的所有函数,请省略任何函数名,并将对象(this
)作为唯一参数,例如\uuuu.bindAll(this)
希望这能帮助一些像我一样困惑的人 你能在JSFIDLE中演示一下吗?这不就是这么做的吗:。我不认为apply()是必要的。不,它不完全一样
apply
将参数列表作为数组,并正常地将参数发送给函数。但是,有很多方法可以解决这个问题,并非所有的方法都需要应用
。我很想理解为什么在这个例子中,.bindAll()方法不起作用。我遇到了关于.bind
和.bindAll
的非常好的解释:.bindAll(this)
从下划线1.4.4开始不再起作用。使用\uu.bindAll.apply(,[this].concat(,.functions(this))代码>似乎工作得很好()