一尘不染

流星中的全局变量

node.js

我有

var Schemas = {};

Meteor.isClient && Template.registerHelper("Schemas", Schemas);

Schemas.Person = new SimpleSchema({
  fullName: {
    type: String,
    index: 1,
    optional: true,
  },
  email: {
    type: String,
    optional: true
  },
  address: {
    type: String,
    optional: true
  },
  isActive: {
    type: Boolean,
  },
  age: {
    type: Number,
    optional: true
  }
});

在一个文件中

var Collections = {};

Meteor.isClient && Template.registerHelper("Collections", Collections);

Persons = Collections.Persons = new Mongo.Collection("Persons");
Persons.attachSchema(Schemas.Person);

在另一个文件中。

我得到了错误ReferenceError: Schemas is not defined。很明显,我必须Schemascollections.js文件中定义而不是将它们分开。但是Meteor如何处理单独文件中的代码?我可以访问某些对象和变量,而另一些则无法访问。


阅读 282

收藏
2020-07-07

共1个答案

一尘不染

当您以经典的JavaScript方式定义变量时:

var someVar = 'someValue';

.js文件的根目录,Meteor使用IIFE将其范围限定为文件。

如果要定义全局变量,只需不要编写var,就可以了:

someVar = 'someValue';

这将定义默认情况下,所有应用程序中的变量,虽然你可以通过写在该声明限制其特定的认可文件夹clientserver例如文件夹)。

但是,不会首先绝对定义此变量。当Meteor运行定义它的实际代码时,将定义它。因此,这可能不是最佳实践,因为您将难以处理加载顺序,这将使您的代码取决于Meteor加载文件的方式:将文件放入哪个文件夹,文件名…如果稍微触摸一下体系结构,则代码很容易出现混乱的错误。

2020-07-07