2017-07-07 5 views
0

サブスクリプションに問題があります。異なるサブスクリプションには、クライアントで同じコレクションを満たす必要があります。たとえば : Iブックスコレクションと二つの異なる出版物を持っている:異なるサブスクリプションで同じクライアントコレクションを更新する

  1. Meteor.publish(‘books’,() => Books.find({ status: { $ne: 3 } });
  2. は、図書の配列を返す「booksForReservation」(図書は予約や他のいくつかのデータに基づいてフィルタリングされ)
  3. を公開します

問題は、あるルートから別のルートに移動するときにクライアントで発生します。すべてのブックスコレクションが主要コンポーネントに含まれており、必要なときにクライアント上のbooksForReservationコレクションがその特定の書籍セットでしか更新されません。

私は次のようにクライアントに加入している:

Meteor.subscribe(‘booksForReservation’, reservationsIds); 
let books = Books.find({}).fetch(); 

が、私はまだ表示されたすべての書籍のコレクションを取得しています。クライアント側でBooksコレクションをサーバーで使用されているのと同じクエリでフィルタリングすると、コレクションが更新されます。しかし、それをサーバー上でフィルタリングすることには何の意味もありません。

同じサブスクリプションで同じコレクションを更新するにはどうすればよいですか?

+0

https://stackoverflow.com/questions/44006793/overlapping-mete-publications/44007620#44007620も参照してください – ghybs

答えて

2

サーバーからのクエリを使用して、クライアント側でコレクションをフィルタ処理する必要があります。 2つのパブリケーションを購読しているので、クライアントで両方のパブリケーションからデータを取得します。サーバー側のフィルタリングコレクションのポイントはセキュリティです。これを行うことで、不要なデータをクライアントに公開することはありません。ここで詳しく読むことができますhttps://guide.meteor.com/data-loading.html#specific-queries