由于缺少集合对象而导致Collection2关系错误

时间:2015-10-07 03:01:47

标签: meteor iron-router meteor-collection2

我正在尝试在2个集合之间创建关系,但其中一个集合无法在另一个集合中引用。具体来说,我有2个集合:Sites和ContentTypes。这就是它们的内容:

// app/lib/collections/sites.js    
Sites = new Mongo.Collection('sites');

Sites.attachSchema(new SimpleSchema({
  name: {
    type: String,
    label: "Name",
    max: 100
  },
  client: {
    type: String,
    label: "Client",
    max: 100
  },
  created: {
    type: Date,
    autoValue: function() {
      if (this.isInsert) {
        return new Date;
      } else if (this.isUpsert) {
        return {$setOnInsert: new Date};
      } else {
        this.unset();  // Prevent user from supplying their own value
      }
    }
  }
}));

这里是ContentTypes集合:

// app/lib/collections/content_types.js
ContentTypes = new Mongo.Collection('content_types');

ContentTypes.attachSchema(new SimpleSchema({
  name: {
    type: String,
    label: "Name",
    max: 100
  },
  machineName: {
    type: String,
    label: "Machine Name",
    max: 100
  },
  site:{
    type: Sites
  },
  created: {
    type: Date,
    autoValue: function() {
      if (this.isInsert) {
        return new Date;
      } else if (this.isUpsert) {
        return {$setOnInsert: new Date};
      } else {
        this.unset();  // Prevent user from supplying their own value
      }
    }
  }
}));

当我将Sites引用添加到ContentTypes架构时,我的应用程序崩溃并出现错误:

  

ReferenceError:未定义网站       在lib / collections / content_types.js:32:11

我还没有找到this以外的集合2中关系的文档。看起来那里引用的格式应该基于this thread

1 个答案:

答案 0 :(得分:1)

这是由于Meteor加载文件的顺序。请参阅文件加载顺序here

部分
  

有几种加载顺序规则。它们按顺序应用于应用程序中的所有适用文件,优先级如下:

     
      
  1. HTML模板文件总是在其他所有内容之前加载
  2.   
  3. 以main开头的文件。最后加载
  4.   
  5. 下一个
  6. 加载任何lib /目录中的文件   
  7. 接下来加载具有更深路径的文件
  8.   
  9. 然后按整个路径的字母顺序加载文件
  10.   

e.g。将app / lib / collections / sites.js重命名为app / lib / collections / a_sites.js,并在加载content_types.js文件时定义Sites变量。