3

次のコードを検討してください。

Meteor.publish("Children", function (id) {
  // Find all the items that are children of an item that I am sharing
  //
  var sharing = Items.find({$and : [{_id:id},{sharing:{$elemMatch: {user_id:this.userId}}}]}).fetch();
  var shared_children = [];
  sharing.forEach(function(share){
    share.children.forEach(function(child){
      shared_children.push(child.id);
    });
  });
  return Items.find({_id:{$in : shared_children}});
});

私の Meteor.publish では、で使用する ID の配列を動的に生成してい.findます。データの手動クエリでは問題なく動作しますが、「共有」フィールドに新しい要素を追加すると、そのフィールドを追加したクライアントだけが更新を表示します。同じ要素を見ている他のクライアントは、サーバーから送信された更新された値を取得しません。彼らは、minimongo データベースにすでにあるもので更新するだけです。サーバー側のMongoDBには新しいエントリが表示されますが、それを作成したクライアント以外のクライアントではクエリを実行できません。

.find計算された値の配列を使用しているため、依存関係システムが発行イベントを再度呼び出さないという問題はありますか?

4

1 に答える 1

0

Meteor の反応がサーバー側で実行されるというのはよくある誤解です。代わりに、典型的なパターンは、サブスクリプションへのパラメーターとしてリアクティブ変数 (Session オブジェクトなど) を持つクライアント側で何かが変更されることです。サブスクリプションの値が変更されると、パブリッシュが新しいパラメーターで再度呼び出されます。

代わりに、これをサーバー側で行いたい場合は、部屋ごとのカウントの例に示すようにオブザーバーを設定する必要があります

于 2012-12-23T05:16:18.457 に答える