この場合、それは主にMeteorのデータモデルの誤解に関するものです。
メソッド呼び出しを使用してデータを送信することは可能ですが、通常はパブリケーションとサブスクリプションを使用することをお勧めします。
クライアントにデータを送信します。これらには、クエリがライブであるというほとんど魔法のような特性があります。 -つまり、クエリの更新はすべてクライアントに自動的に送信されます。あなたが持っている現在のコードは、それが適切に機能した場合、ライブデータを持っていません。具体的な問題は、Meteor.call
は非同期であるため、メッセージヘルパーには何も表示されません。
代わりに、これがあなたがしたいことです。サーバー上で、パブリケーションを設定します メッセージコレクションの例:
Meteor.publish("someWeirdName", function() {
return Messages.find({},{ sort: { timestamp:-1}, limit: 20});
});
コードとの違いに注意してください。fetch()
はありません。 、ライブカーソルと20
が必要なため おそらく制限オプションとして意図したものです。これをsomeWeirdName
とも呼んでいることに注意してください それが出版物の名前だからです 、クライアントでサブスクライブするために使用するコレクションではありません。詳細な説明については、
次に、クライアントでは、次のものが必要です。
Meteor.subscribe("someWeirdName");
Template.messages.helpers({
showMessages: function(){
return Messages.find();
}
});
Meteor.subscribe("Messages")
の前回の呼び出しに注意してください Messages
という名前の出版物がなかったため、何もしていませんでした 。また、メッセージのクライアント側キャッシュを使用して、メッセージを表示するためのカーソルを作成します。
また、このコードはすべて、サーバーとクライアントの両方で次のように宣言されている必要があります。
Messages = new Mongo.Collection("callMeWhateverYouWant");
カスタムパブリケーション 。基盤となるデータベースのコレクションを識別するだけです。