始终定义模块经常依赖的库的路径,如下所示:
<script data-main="scripts/main" src="scripts/require.js"></script>
文件:脚本/main.js
require.config({
paths: {
jQuery_1_7_2: 'lib/jquery.1.7.2',
underscore: 'lib/underscore',
.....
.....
}
});
注意:您需要在模块中包含库并作为对象返回,如下所示:
文件:lib/jquery.1.7.2.js
define([ 'lib/jquery/jquery.1.7.2.min' ], function() {
return jQuery.noConflict(true);
});
对于不遵循模块化方法的其他库 [AMD 规范],可以遵循相同的方法
注意:使用shim 功能可以避免上述定义库模块的步骤
由于您的页面是动态的,因此您永远不知道将加载哪些模块。
您可以调用多个 require() 调用来加载模块。由于 requirejs 异步加载脚本,因此以下方法不会损害您的页面性能。
在 HTML 视图中的 Module-1
<html>..
<div id="module_1">
//contents of module 1
</div>
<script type="text/javascript">
require(["scripts/widgets/module_1"], function( module_1 ){
module_1.init();
})
</script>
..</html>
文件:脚本/小部件/module_1.js
define(["jQuery_1_7_2","underscore"], function($, _){
// Module functionality goes here
return {
init: function(){
// Module initialiser
}
}
});
模块 2 内置 HTML 视图
<html>..
<div id="module_2">
//contents of module 2
</div>
<script type="text/javascript">
require(["scripts/widgets/module_2"], function( module_2 ){
module_2.init();
})
</script>
..</html>
文件:脚本/小部件/module_2.js
define(["jQuery_1_7_2","underscore"], function($, _){
// Module functionality goes here
return {
init: function(){
// Module initialiser
}
}
});
如果您不介意在 DOM 加载后初始化模块,您可以使用controljs并更改脚本标签的 MIME 类型。我相信这不会对页面性能产生太大影响。