我正在尝试拨打file uploader插件。选择文件后,将从库中调用add
方法。在调用add
时,我需要使用opts
方法作为参数传递父方法参数add
。
这是使用RequireJS库的一段代码。
return {
onFileChoose: function (e, data) {
// I need 'opts' object here
},
start: function (opts) {
$('fileupload').fileupload({
url: '//testbucket.s3.amazonaws.com', // Grabs form's action src
type: 'POST',
autoUpload: true,
dataType: 'xml',
add: this.onFileChoose
});
}
}
我需要opts
中的onFileChoose
对象。
我试过
add: function (e, data) {
this.onFileChoose(e, data, opts);
}
以上代码产生的错误为this.onFileChoose is undefined
。
如何解决这个问题?
答案 0 :(得分:1)
问题出在回调方法中,this
没有引用具有方法的对象
使用闭包变量
return {
onFileChoose: function (e, data) {
// I need 'opts' object here
},
start: function (opts) {
var self = this;
$('fileupload').fileupload({
url: '//testbucket.s3.amazonaws.com', // Grabs form's action src
type: 'POST',
autoUpload: true,
dataType: 'xml',
add: function (e, data) {
self.onFileChoose(e, data, opts);
}
});
}
}
或使用$ .proxy()
return {
onFileChoose: function (e, data) {
// I need 'opts' object here
},
start: function (opts) {
$('fileupload').fileupload({
url: '//testbucket.s3.amazonaws.com', // Grabs form's action src
type: 'POST',
autoUpload: true,
dataType: 'xml',
add: $.proxy(function (e, data) {
this.onFileChoose(e, data, opts);
}, this)
});
}
}