我有
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。很明显,我必须Schemas在collections.js文件中定义而不是将它们分开。但是Meteor如何处理单独文件中的代码?我可以访问某些对象和变量,而另一些则无法访问。
ReferenceError: Schemas is not defined
Schemas
collections.js
当您以经典的JavaScript方式定义变量时:
var someVar = 'someValue';
在.js文件的根目录,Meteor使用IIFE将其范围限定为文件。
.js
如果要定义全局变量,只需不要编写var,就可以了:
var
someVar = 'someValue';
这将定义默认情况下,所有应用程序中的变量,虽然你可以通过写在该声明限制其特定的认可文件夹(client或server例如文件夹)。
client
server
但是,不会首先绝对定义此变量。当Meteor运行定义它的实际代码时,将定义它。因此,这可能不是最佳实践,因为您将难以处理加载顺序,这将使您的代码取决于Meteor加载文件的方式:将文件放入哪个文件夹,文件名…如果稍微触摸一下体系结构,则代码很容易出现混乱的错误。