2012-10-15 32 views
1

我正在寫一個骨幹+ RequireJS項目,遇到以下情況的產生:骨幹+ 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中的共享名稱空間(如cache.temp = $.ajax(options))下,然後在模塊A中調用cache.temp.done(),但它在$.ajax(options)創建之前發生,因此cache.temp只是undefined

我想解決這個問題的一種方法是創建一個延遲,延遲$.ajax(options)準備好之前的代碼的執行,但我不太確定這是否是可行的。或者如果周圍有更好的想法,我就會全神貫注。

+0

您是否在$ .ajax設置中設置了「完成」回調? – opengrid

+0

這些請求的順序是重要的還是隻需要知道兩者何時完成? – fearphage

回答

0

如果你有ajax或延遲的obj,你可以使用$.when$.then

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

4

這裏是推遲使用jQuery 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); 
    }); 
});