4

サーバーで流星コレクションを定義し、流星が提供するメソッドのいずれにも属さずにクライアントでそれらにアクセスしようとすると、クライアントでrendered, events, created, helpers ...メソッドMeteor collection not definedを再定義しようとすると、Meteor collection already exists. Meteor.startup()カスタムメイドのコレクションを関数で参照することで、これを回避できます。サーバーで定義したコレクションをクライアントで参照するにはどうすればよいですか。流星のドキュメントではMeteor.Collection()、宣言する前でも の 2 つのインスタンスを作成して購読することができます。

// okay to subscribe (and possibly receive data) before declaring
// the client collection that will hold it.  assume "allplayers"
// publishes data from **server's "players" collection.**
Meteor.subscribe("allplayers");
...
// client queues incoming players records until ...
...
Players = new Meteor.Collection("players");
4

1 に答える 1

6

Players = new Meteor.Collection("players");になくても、ファイルの先頭に配置できますMeteor.startup。開始する前に定義されていることを確認してくださいMeteor.subscribe

たとえば、ファイルは次のようになります。

Players = new Meteor.Collection("players");
MyCollection2 = new Meteor.Collection("MyCollection2");

Meteor.subscribe("allplayers");
Meteor.subscribe("mycollection2");

..rest of stuff

これを含むプロジェクトのルート ディレクトリにファイルを作成することで、クライアントとサーバーの両方でファイルを再定義しなくても使用できるようにすることで、少しすっきりするかもしれませんcollection.js

Players = new Meteor.Collection("players");
MyCollection2 = new Meteor.Collection("MyCollection2");

if(Meteor.isClient) {
    Meteor.subscribe("allplayers");
    Meteor.subscribe("mycollection2");   
}

Playersそのため、 orMyCollection2/serverorで定義する必要は/clientもうありません。meteor がファイルをロードする方法により、これが他の通常のファイルの前に定義されることが保証されます。これはおそらく、他の隕石の例 (パーティー & todo) で使用されている/client,/serverおよび形式でファイルを整理した場合に最適に機能します。/public

編集:BenjaminRHが示唆するように、ファイルを/lib/collections.js配置すると、ルートプロジェクトディレクトリ内の他のファイルよりも先にロードされることが保証されます。

于 2013-04-24T16:14:45.577 に答える