2016-12-02 15 views
1

これはReactとMeteorsの接続に制限があるのか​​どうか分かりませんが、ドキュメントでは余分なパラメータなしで可能であることが示唆されています。反応と流星サブスクリプション

私はmeteorサブスクリプションを呼び出すと、クエリで明示的にパラメータを指定しないと、パブリッシュ関数で指定されたデータを無視してデータを返します。

Meteor.publish("supplier", function() { 
    if(this.userId) { 

     var user = Meteor.users.findOne(this.userId, { fields : { active : 1 }}); 
     if(user.active != this.userId || user.active != undefined){ 

     // This only returns 1 singular supplier - is correct 
     var supplier = Supplier.find({ _id : user.active, users : this.userId }); 
     return supplier; 

     } else { 
     return this.ready(); 
     } 
    } else { 
     return this.ready(); 
    } 
}); 

は今、私は反応してサブスクリプションを呼び出すように

getMeteorData: function() { 

    var data = {} 

    handle = Meteor.subscribe("supplier"); 

    if(handle.ready()) { 
     data.supplier = Supplier.findOne(); // Returns Wrong supplier 
     //data.supplier = Supplier.findOne({_id: session.get("active")}) // Returns correct supplier 
     data.supplierReady = true 
    } 

    return data; 

    }, 

これは、コレクション内の最初のサプライヤを返すサーバー上の公開機能に記録されていない1!しかし、私はexplicablyを渡す場合{ _id : user.active}それは動作します!

publish機能内のサーバー上でロジックを実行すると、私は単純にSupplier.findOne()を使用できますが、これは当てはまりません。理由はわかりません。これはReact/Meteorの制限ですか、これは間違っていますか?

答えて

2

これはリアクション固有の問題ではなく、findOneの動作の結果です。クライアント側に1つまたは複数の文書がある場合、Supplier.findOne()は、サブスクリプションから取得したドキュメントを参照することなく利用可能な最初のレコードを取得するだけです。

これは、(a)他の既存のサブスクリプションのためにクライアント側で複数のサプライヤを利用できること、または(b)サブスクリプションhandleから複数のサプライヤを返すことを意味します。

handleサブスクリプションの前にクライアント側のコレクションの状態を確認してください。 1つ以上のドキュメントがあり、それがアプリケーションの意図された状態である場合は、クライアント側のfindOneを変更して以前と同じように{_id: user.active}を追加します。

+0

こんにちはジェレミー。有益な答えをありがとう。私は今、プリンシパルを理解しています。サプライヤコレクションの複数のサブスクリプションが存在する必要があります(サプライヤ間で切り替えることができます)。私はあなたが "クライアント側のコレクションの状態を確認する"ことによって何を意味するのかを説明したり説明することができれば興味があります。クライアントコレクションをチェックするためのカウントまたはクエリを意味しますか? – Allreadyhome

+1

はい、私はあなたがサブスクリプションが実行される直前にクライアントコレクションを見ることができたことを意味しました。あなたはconsole.logにfind().fetch()やfind()。count()を使って簡単に調べることができます。あるいは、コレクションをより慎重に調べるために利用できるツールを使うこともできます。私が本当に好きで使いたいのは、https://github.com/bakery/meteor-devtoolsです.Mongolを使いたい人もいます。コードやコンソールにコマンドを入力する必要がないので、ちょっと簡単です。 –

+0

デベロッパーツールに関する素晴らしいお勧め。ありがとう! – Allreadyhome

関連する問題