Meteor を使用して webapp を作成しようとしていますが、公開されたデータセットのサブスクライブについて何かを理解できていません。アプリ全体はgithubにアップされています (後世のために最新のコミットにリンクされています) が、以下に要約してみます。
クライアントとサーバーの両方で利用できるチームと呼ばれるコレクションがあります。
Teams = new Meteor.Collection( "teams" );
サーバー上で、すべてのチームのリストを公開したいと考えています。
Meteor.publish( "allteams", function() { ...
この公開リストを構成する非常に単純なカーソルがあります。
var handle = Teams.find( {} ).observeChanges({
added: function( id ) {
console.log( "New team added" );
if ( !initializing ) {
console.log( "Telling subscribers it's all change" );
self.added( "teams", id, {} );
self.ready();
}
}
});
クライアントはそのソースをサブスクライブし、要素が追加されると、クライアントはピンをマップに追加します。
Meteor.autorun( function() {
Meteor.subscribe( "allteams", function() {
console.log( "All teams has been updated" );
// Do more stuff
}
};
リストが最初に読み込まれると、自動実行は正常に実行されますが、コレクションに別の要素を追加すると、パブリッシャー メソッドは「これに気づきました」とログに記録しますが、サブスクライバーでは何も起こりません。
上記の目的は次のとおりです。
- サーバーには、名前と経度/緯度の詳細で構成されるチームのリストがあります
- クライアントが接続すると、チームのリストを受け取り、マップにプロットされます
- チームがサーバー側のリストに追加されると、各クライアントに通知され、新しいピンがマップに表示されます。
アプリに関して言えば、魔法のようにピンを表示する必要はないかもしれませんが、特にピンが正しくない場合は、パブリッシュとサブスクライブを学習するのに便利な方法です! 最終的には、「allteams」はおそらくチームのリスト全体よりももう少し細かいものになるので、データのビューを作成することに似ていると思います.
完全に明らかな何かが欠けていますか?
編集:私はそれを解決し、答えを下に置きました。tl;dr 私はリアクティブなデータ ソースをまったく購読していませんでした。