所以这是我的代码流程:
main.js --> jquerymobile --> router --> extra --> lib1 --> lib2
在extra.js中,在加载lib2之后,我设置了我的模块
//extra.js
require( ['lib1'], function () {
$("#body").append('<p>got lib1</p>');
require(['lib2'],
$("#body").append( '<p>got lib2</p>' );
window.stuff = true;
$("#body").append( '<p>set my module</
});
});
在我的router.js中,我在加载额外后使用我的模块:
//router.js
require(['../extra'], function() {
$("#body").append( '<p>using my module</p>' );
console.log( window.stuff );
});
我希望在router.js中使用之前设置我的模块。但是,这是我得到的顺序:
set my router
using my module
got lib1
got lib2
set my module
当我尝试使用我的模块(window.stuff)时,我当然得到了未定义。
以下是此错误的演示:https://dl.dropbox.com/u/19311981/demo.zip
你能帮助我弄清楚在指定依赖关系时我做错了什么吗?
答案 0 :(得分:3)
唯一可以确保在额外返回时加载lib1和lib2的方法是使用define syntax并将它们预先声明为依赖项。稍后再做它类似于任何其他异步调用。你不知道什么时候会回来。
//extra.js
define(['lib1', 'lib2'], function(lib1, lib2) {
$("#body").append('<p>got lib1</p>');
$("#body").append( '<p>got lib2</p>' );
window.stuff = true;
$("#body").append( '<p>set my module</
return something;
});
您可能还想重新考虑使用全局window.something变量作为模块中的通信方法。相反,让模块返回一些你可以使用的对象:
//router.js
require(['../extra'], function(extra) {
$("#body").append( '<p>using my module</p>' );
console.log( extra );
});