requireJS中的全局变量

dan*_*l__ 11 javascript jquery requirejs

可能重复:
如何在使用AMD时加载Backbone.js中的自举模型(require.js)

这是一个关于我的问题的简单演示.

我需要访问id_userin main.js文件.我的问题是,在这种情况下如何避免全局变量?为此目的使用全局变量是不好的做法吗?

main.js

require({
    paths : {
        jQuery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min'
    }
});

require([ 'jQuery' ], function() {
       alert(id_user);
    });
Run Code Online (Sandbox Code Playgroud)

的index.php

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

<script type="text/javascript">
function users() {
    id_user = <?php echo $id; ?>
}

users();
</script>
Run Code Online (Sandbox Code Playgroud)

Gil*_*esC 10

在使用requirejs的项目中不应该存在任何全局变量,因为它处理模块并且所有模块(及其属性/方法)永远不会被全局声明以保持环境的良好和干净.如果您需要一个模块在另一个模块中使用变量集,那么它们应该通过某个API相互通信,或者将该变量设置为属性,需要模块并以此方式获取属性.

但也许你应该问自己是否真的需要requirejs.如果你想建立一个适当的模块基于应用程序(我不知道你是,如果你想知道如何通过周围变量),那么是的,如果你想要的是从JS加载一些文件,然后LazyLoad(HTTP:// WWW. appelsiini.net/projects/lazyload)可能就是答案.只是说根据你的情况考虑值得思考,特别是考虑到requirejs的足迹.

  • 传递变量的一种hacky方法是在DOM中将它们设置在<meta name ="MyData"value ="Boo"id ="myData"/>中,然后抓取value属性. (2认同)
  • 您应该声明一个包含该值的模块.因为requirejs刚刚加载,你应该能够定义('user',{id:<?php $ id?>}); 然后从main.js require('user',function(user){console.log(user.id)}); (2认同)