Backbone + RequireJS - 延迟等待创建另一个延迟对象

时间:2012-10-15 02:51:15

标签: javascript jquery backbone.js requirejs jquery-deferred

我正在编写一个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);
}

我试图在模块B中的共享命名空间(如$.ajax(options))下挂钩cache.temp = $.ajax(options),然后在模块A中调用cache.temp.done(),但它在{{1}之前发生了}已创建,因此$.ajax(options)只是cache.temp

我想解决这个问题的一种方法是创建一个延迟,在undefined准备好之前延迟代码的执行,但我不太确定这是否可行。或者,如果周围有更好的想法,我会全力以赴。

2 个答案:

答案 0 :(得分: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);
    });
});

答案 1 :(得分:0)

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

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