0

我正在尝试调用文件上传器插件。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.

如何解决这个问题?

4

1 回答 1

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)
        });
    }
}
于 2013-09-30T07:06:07.873 回答