无法在require.js中定义全局变量

时间:2012-12-03 23:18:43

标签: requirejs

我正在尝试定义一个可以在所有模块中引用的全局对象。但是,在模块中,我无法引用我的路径,并且它说“g”不存在。

在main1.js中,我有这个:

requirejs.config({
  paths: {
    Underscore: 'lib/underscore/1.3.3/underscore.min',
    Backbone: 'lib/backbone/0.9.2/backbone.min',
    Globals: 'lib/backbone/ globalVars'
  }
});

require([ 'views/pages', 'views/filters'], function(allPages, filters) {
  filters.render();
  allPages.render();
});

在globalVars.js中,我有这个:

(function() {
    var Globals = {
        isDemo: false
    }
    console.log('in globalvars') // this shows in my console
}).call(this);

最后,在view / pages.js中,我有这个:

define([
  'Globals',
  'Underscore',
  'Backbone'
], function(g, _, Backbone){
console.log(g.isDemo)  //<-- returns "TypeError: g is undefined"

如果我在main1.js中使用了这样的定义:

define( 'Globals', function() {
    return {
        isDemo: true
    }
})

它运作得很好。我试图弄清楚为什么这不起作用我没有太多运气。我希望能够只包含一个globalVars的路径,而不是在每个需要它的模块中粘贴一个定义块的样板,因为将isDemo更改为false将需要更新许多其他模块页面(main2.js,main3。 js等)。谢谢!

1 个答案:

答案 0 :(得分:1)

嗯,首先,您的globalVars.js不在模块模式中,因此requirejs不知道您尝试注册为模块的内容。如果您更改该文件以使用该模式,例如您添加到main1.js的定义,则应该全部设置。您是不是有理由将其定义为模块?