使用requireJS和data-main的main参数

时间:2012-05-05 16:44:34

标签: requirejs

我想知道是否有办法使用data-main参数将参数传递给requireJS。

<script data-main="Main"  src="lib/require/require.js"></script>

我可以介绍全局:

<script>
    var mainId = "Main";
    var mainTarget = "body";
</script>
<script data-main="Main"  src="lib/require/require.js"></script>

但我想知道是否有更清洁的方法来做到这一点。谢谢!

编辑:

Simon,对于mainTarget值,这是一个很棒的计划。

require([
    'plugins/load!./'+mainId+'.htm',
    'plugins/load!./'+mainId+'.css'
],function(html,css){
    var Main = function(){
        this.__proto__ = mainTarget;
    }
    new Main();
}

如何将此应用于mainId?

1 个答案:

答案 0 :(得分:15)

实现此目的的一种方法是创建一个全局或通用模块,并将其用作依赖项:

<强> global.js

define({
    foo: 'test',
    bar: 'red'
});

使用全局:

require(['global'], function(global) {
    console.log(global.foo) // 'test'
});

这依赖于JS文件中保存的全局对象属性。 它也是将数据从服务器端输出到HTML页面中的JS对象的常见模式。为此,您只需为模块命名即可。

<head>
    <script>
        define('global', {
            mainId: 'Main',
            mainTarget: 'body' 
        })
    </script>
</head>

<强> main.js

require(['global'], function(global) {
    console.log(global.mainId) // 'Main'
});

如果您定义了一个需要全局属性的模块,只需将global模块设置为依赖项。

您还可以使用priority配置选项确保您的全局模块先于其他任何内容加载 - http://requirejs.org/docs/api.html#config