この設定を機能させるには、次のことを行う必要があります。
Meteor.publish('thisNameDoesNotMatter', function () {
var self = this;
var handle = Meteor.users.find({}, {
fields: {emails: 1, profile: 1}
}).observeChanges({
added: function (id, fields) {
self.added('thisNameMatters', id, fields);
},
changed: function (id, fields) {
self.changed('thisNameMatters', id, fields);
},
removed: function (id) {
self.removed('thisNameMatters', id);
}
});
self.ready();
self.onStop(function () {
handle.stop();
});
});
いいえ、クライアント側では、クライアント側のみのコレクションを定義する必要があります:
directories = new Meteor.Collection('thisNameMatters');
対応するデータセットをサブスクライブします:
Meteor.subscribe('thisNameDoesNotMatter');
これでうまくいくはずです。この説明が十分に明確でないと思われる場合はお知らせください。
編集
ここでは、self.added/changed/removed
メソッドは、多かれ少なかれイベントディスパッチャとして機能します。簡単に言えば、彼らは電話をかけたすべてのクライアントに指示を与えます
Meteor.subscribe('thisNameDoesNotMatter');
thisNameMatters
という名前のクライアントのコレクションに適用する必要がある更新について このコレクションが存在すると仮定します。名前(最初のパラメーターとして渡される)はほぼ任意に選択できますが、クライアント側に対応するコレクションがない場合、すべての更新は無視されます。このコレクションはクライアント側のみである可能性があるため、データベース内の「実際の」コレクションに対応している必要はないことに注意してください。
publish
からカーソルを返す メソッドこれは上記のコードのショートカットにすぎませんが、theNameMatters
の代わりに実際のコレクションの名前が使用される点が異なります。 。このメカニズムにより、実際には、データセットの「ミラー」を必要な数だけ作成できます。状況によっては、これが非常に役立つ場合があります。唯一の問題は、これらの「コレクション」が読み取り専用になることです(これは完全に理にかなっています)。サーバーで定義されていない場合、対応する「挿入/更新/削除」メソッドが存在しないためです。