这是我的代码流程:
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
你们能帮我找出我在指定依赖项时做错了什么吗?
最佳答案
确保额外返回时加载 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 );
});
关于dependencies - requireJS 2.1.5 嵌套 require 的依赖关系乱序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15672706/