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 に答える