我正在编写一个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
准备好之前延迟代码的执行,但我不太确定这是否可行。或者,如果周围有更好的想法,我会全力以赴。
答案 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)