0

2 つのコレクション間の関係を作成しようとしていますが、コレクションの 1 つを他のコレクションで参照することはできません。具体的には、Sites と ContentTypes の 2 つのコレクションがあります。これはそれらが含まれるものです:

// 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 でサイトが定義されていません

これを超える collection2 の関係のドキュメントを見つけるのはあまり運がありませんでした。そこで参照されている形式は、このスレッドに基づいて機能するはずです。

4

1 に答える 1

1

これは、Meteor がファイルをロードする順序によるものです。ここでファイルの読み込み順序に関するセクションを参照してください。

いくつかのロード順序規則があります。これらは、アプリケーション内の該当するすべてのファイルに、次に示す優先順位で順番に適用されます。

  1. HTML テンプレート ファイルは常に他のすべてのファイルよりも先に読み込まれます
  2. main で始まるファイル。最後にロードされます
  3. lib/ ディレクトリ内のファイルが次にロードされます
  4. より深いパスを持つファイルが次に読み込まれます
  5. ファイルは、パス全体のアルファベット順にロードされます

たとえば、app/lib/collections/sites.js の名前を app/lib/collections/a_sites.js に変更すると、content_types.js ファイルが読み込まれるときに Sites 変数が定義されます。

于 2015-10-07T03:28:13.377 に答える