2015-10-07 4 views
0

Я пытаюсь создать связь между двумя коллекциями, но одна из коллекций недоступна для ссылки в другой. В частности, у меня есть 2 коллекции: Сайты и ContentTypes. Это то, что они включают в себя:Ошибка связи Collection2 из-за отсутствующего объекта коллекции

// 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 
     } 
    } 
    } 
})); 

Когда я добавить ссылку на сайты в схеме ContentTypes, я в приложение падает с ошибкой:

ReferenceError: Sites is not defined at lib/collections/content_types.js:32:11

Мне не очень повезло найти документацию для отношений в коллекции2 за пределами this. Похоже, что формат, на который ссылается, должен работать на основе this thread.

ответ

1

Это связано с тем, что Meteor загружает файлы. См. Раздел «Заказ на загрузку файла» here:

There are several load ordering rules. They are applied sequentially to all applicable files in the application, in the priority given below:

  1. HTML template files are always loaded before everything else
  2. Files beginning with main. are loaded last
  3. Files inside any lib/ directory are loaded next
  4. Files with deeper paths are loaded next
  5. Files are then loaded in alphabetical order of the entire path

, например. переименуйте app/lib/collections/sites.js в app/lib/collections/a_sites.js, а переменная Sites будет определена при загрузке файла content_types.js.