Meteor js を開始したばかりで、公開方法に苦労しています。以下は、公開方法の 1 つです。
//サーバ側
Meteor.publish('topPostsWithTopComments', function() {
var topPostsCursor = Posts.find({}, {sort: {score: -1}, limit: 30});
var userIds = topPostsCursor.map(function(p) { return p.userId });
return [
topPostsCursor,
Meteor.users.find({'_id': {$in: userIds}})
];
});
// クライアント側
Meteor.subscribe('topPostsWithTopComments');
現在、クライアントでパブリッシュ データを使用する方法がわかりません。私はtopPostsWithTopCommentsによって与えられるデータを使いたいと思っていました
問題は以下に詳述されています
新しい投稿がトップ 30 リストに入ると、次の 2 つのことが必要になります。
The server needs to send the new post to the client.
The server needs to send that post’s author to the client.
Meteor は 6 行目に返された投稿カーソルを監視しているため、新しい投稿が追加されるとすぐに送信され、クライアントが新しい投稿をすぐに受信できるようになります。
ただし、7 行目に返された Meteor.users カーソルについて考えてみましょう。カーソル自体がリアクティブであっても、現在は userIds 配列に古い値を使用しています (これは単純な古い非リアクティブ変数です)。つまり、その結果セットは次のようになります。同様に時代遅れです。
これが、そのカーソルに関する限り、クエリを再実行する必要がなく、Meteor が元の 30 のトップ投稿に対して同じ 30 人の著者を無限に公開し続ける理由です。
そのため、パブリケーションのコード全体を (userId の新しいリストを作成するために) 再度実行しない限り、カーソルは正しい情報を返さなくなります。
基本的に私が必要とするのは:
Post で変更が発生した場合は、更新されたユーザー リストが必要です。ユーザーコレクションを再度呼び出す必要はありません。ユーザーの完全な mrt モジュールをいくつか見つけました。 リンク1 | リンク2 | リンク3
あなたの意見を共有してください!
-ニーレシュ