如何将父方法的参数传递给它的内部调用方法?

时间:2013-09-30 07:04:17

标签: javascript jquery scope this jquery-file-upload

我正在尝试拨打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

如何解决这个问题?

1 个答案:

答案 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)
        });
    }
}