1

Backbone + RequireJS プロジェクトを作成していて、次の状況に遭遇しました。

モジュール A:

Backbone.Mediator.publish('ajax:fetch:in:module:b');

// I need to do something like **$.ajax(options).done()** here

モジュール B:

subscriptions: {
    'ajax:fetch:in:module:b': fetch
},

fetch: {
    $.ajax(options);
}

$.ajax(options)モジュール Bの共有名前空間 ( など) の下でフックしてから、モジュール A 内cache.temp = $.ajax(options)で呼び出しようとしましたが、それは が作成されるcache.temp.done()前に発生したため、単に.$.ajax(options)cache.tempundefined

この問題を解決する 1 つの方法は、準備が整う前にコードの実行を遅らせる deferred を作成することだと思いますが、これが実行$.ajax(options)可能かどうかはよくわかりません。または、より良いアイデアがあれば、私はすべて耳を傾けます。

4

2 に答える 2

4

次に、jquerydeferredで動作するrequirejsの簡単な例を示します。

moduleA.js

define(['require', 'jquery'], function(require, $) {

    var deferred = $.Deferred();

    require(['moduleB'], function(moduleB) {
        deferred.resolve(moduleB);
    });

    return deferred.promise();

});

app.js

require(['moduleA'], function(deferred) {
    deferred.done(function(moduleA) {
        console.log(moduleA);
    });
});
于 2012-11-09T14:26:14.607 に答える
0

ajax または deferred obj がある場合は、このように$.when使用できます。$.then

$.when( ajax call).then( do other thing)

于 2012-10-17T11:46:50.593 に答える