在Meteor.js中定义变量

时间:2013-07-22 13:04:37

标签: javascript meteor

当我如下所示定义变量lists并在控制台中输入lists时,我收到错误ReferenceError: lists is not defined

var lists = new Meteor.Collection('Lists');

if (Meteor.isClient) {
  Template.hello.greeting = function () {
    return "my list.";
  };

  Template.hello.events({
    'click input' : function () {
      // template data, if any, is available in 'this'
      if (typeof console !== 'undefined')
        console.log("You pressed the button");
    }
  });
}

if (Meteor.isServer) {
  Meteor.startup(function () {
    // code to run on server at startup
  });
}

仅当我将lists声明为全局变量时才有效:

lists = new Meteor.Collection('Lists');

问题:为什么必须将其作为全球范围?

1 个答案:

答案 0 :(得分:8)

要在控制台中访问lists,您需要使用全局范围,因为控制台不在文件范围内,因为控制台被视为自己的文件。

使用var,您可以在文件中的任意位置访问lists

本质上,每个文件都包含在function() {..}中。这就是为什么不能在它们之外访问每个文件的变量的原因。

存在变量范围的原因稍微复杂一些,但与第三方软件包/ npm模块更相关。每个包都需要有自己的范围,不会与外面的东西发生名称冲突。

如果您希望能够更正常地使用它,您也可以将它放在/compatibility文件夹中。