多个脚本的requirejs用法

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

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

提前感谢您的回答。


我的问题是:你的代码在哪里? - Joseph
2个回答

3

这个想法是你只需要一个data-main属性来加载main.js,然后在main.js文件里可以有条件地加载其他脚本。

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

请查看:http://requirejs.org/docs/start.html,或者我误解了问题?

是的,那就是我的问题。 对我来说,这似乎不太实用。 但如果那是唯一的方法,我会选择它。非常感谢。 - Calardan
1
我同意 @Calardan 的观点... 根据你所描述的解决方案,主脚本需要知道我在整个站点中可能需要的每个脚本... 这似乎不是一个良好的关注点分离。 - Mir

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中正常使用data-main。然后在main.js内部:
// start independent load of navigation.js
require(['navigation']);
// load modules required for main
require(['moduleA', 'moduleB'], function(moduleA, moduleB){
    // inside main.js
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接