带有requirejs的多个脚本

时间:2012-06-13 11:40:13

标签: javascript requirejs

我有一个requirejs的问题。也许我真的不知道它应该如何工作,但对我而言,requirejs不允许我将我的代码分成不同的独立脚本似乎相当适得其反。 由于我使用Play及其模板语言来构建页面结构,因此我尝试将不同的javascript逻辑插入到页面的不同部分中。例如:我有一个main.scala.html,它包含每个页面都需要的组件,以及它们的js逻辑。当另一个页面需要导航栏时,我将其与相应的逻辑一起插入。所以我有一个main.js和一个navigation.js。由于它们只依赖于Jquery移动设备而不是相互依赖,因此我想用不同的标签加载它们。第二个脚本永远不会被加载所以我的直觉是requirejs似乎不允许在一个页面上允许多个数据主要属性。

所以我的问题是:是否可以使用requirejs在一个页面中拥有多个独立脚本?如果没有,为什么?

提前致谢

2 个答案:

答案 0 :(得分:3)

我们的想法是,您只有一个data-main属性可以加载main.js,然后在main.js内可以有条件地加载其他脚本

if (something) {
  require(["this"], function(this) { ... });
} else {
  require(["that"], function(that) { ... });
}

请参阅:http://requirejs.org/docs/start.html

或者我误解了这个问题?

答案 1 :(得分:1)

data-main适用于您的页面只有一个requirejs应用程序的情况。如果您有多个,请不要使用data-main。这很简单,下面是使用main.js和navigation.js

的示例
<script src='require.js'></script>
<script>
   require(['main']);
   require(['navigation']);
</script>

虽然我认为你的页面确实需要navigation.js。将每个页面视为应用。所以数据主要正常进入你的main.js。

然后在main.js中:

// start independent load of navigation.js
require(['navigation']);
// load modules required for main
require(['moduleA', 'moduleB'], function(moduleA, moduleB){
    // inside main.js
});