0

私が使用している: https://github.com/blueimp/jQuery-File-Upload

done基本的に、現在のコールバックを保存して、信じられないほど複雑な独自のコールバックで呼び出すことができる必要がありdoneます (jquery ui ウィジェットには詳しくありません)。

これが私が役に立たないようにしようとしているコードです:

var $el = $('#fileupload');
$el.fileupload();
var olddone = $el.fileupload('option', 'done');
$el.fileupload('option', 'done', function(e, data) {
    data = ... manipulate data ...;
    return olddone(e, data);
});

私はテーマにさまざまなバリエーションを試しました:

return olddone.call(this, e, data);

と:

return olddone.call($el.data('fileupload'), e, data);

と:

return olddone.call($el[0], e, data);

そして、すべてのエラーは基本的に、それthisが正しくなく、コンテキストが次のすべての呼び出しに対して正しくないことを教えてくれます。私は何を間違っていますか?特定のコールバックを多かれ少なかれサブクラス化しながら、元のコールバックを引き続き使用/呼び出すにはどうすればよいですか?

さらに悪いことに、 (参照を保存して呼び出す代わりに) 代わりにdoneコールバックのソースをコピーしolddoneても機能しないようです。

thisjQuery UI Widgetオプション関数のコンテキストには何がありますか? なぜこれはとても複雑なのですか?私は何が欠けていますか?

編集: いくつかのウィジェットのドキュメントを読んだ後、すべてのメソッドが常にウィジェット インスタンスとして呼び出されるthisようです。

olddone.call($el.data('fileupload'), e, data)

アップデート:

done:ここにあるコールバックを保持しようとしていoptionsます: https://github.com/blueimp/jQuery-File-Upload/blob/75d11179fd9c248c061c8eb428782bb556c8db0a/js/jquery.fileupload-ui.js#L139

4

1 に答える 1

1

渡されたデータを誤用していて、本当に正しく使用する必要があることがわかりました。これは、これを機能させるために必要な最後のコードです。

var olddone = $el.data('fileupload').options.done;
$el.fileupload('option', 'done', function(e, data) {
    data.result = ... manipulate data ...;
    return olddone.call(this, e, data);
});

olddone.call(this, ...)なんらかの理由でまだ必要であることが判明しました。なぜthis現在のコンテキストから継承され、代わりに未定義だったのかわかりません。

于 2012-05-17T01:27:58.963 に答える