我在调用uploader
时尝试将this
保留为onSubmit
上下文时遇到问题。任何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
答案 0 :(得分:4)
解决问题:http://jsfiddle.net/WilsonPage/BE3Lp/41/
我发现的几件重要事项:
_.bindAll()
。this
。this
)中存在的函数的名称,它们必须是字符串形式! this
),则省略任何函数名称,并将对象(this
)作为唯一参数,例如。 _.bindAll(this)
希望这有助于像我这样的一些混乱的窥视!
答案 1 :(得分:1)
使用call
或apply
,您可以为任何功能指定this
的上下文。这应该是诀窍(在fileUploader声明中):
onSubmit: function() {
that.onSubmit.apply(that, arguments);
}
修改:更新了jsfiddle:http://jsfiddle.net/WDTBV/1/