2016-08-14 4 views
0

私はproductionalizeしようとしているmeteor.jsアプリを持っています。私は各ユーザーが獲得した "ポイント"のレコードを格納するコレクションUserEarningsを持っています。今、私は、サーバー上のすべてのレコードを公開しています:サーバ上でフィルタリングするとMeteor.jsのパブリケーションが結果を返さないのはなぜですか?

Meteor.publish('userEarnings',() => UserEarnings.find()); 

とクライアント上の特定のユーザーのみに関連するものまで、レコードをフィルタリング:

const composer = (props, onData) => { 
    const subscription = Meteor.subscribe('userEarnings'); 
    if (subscription.ready()) { 
     const userEarnings = UserEarnings.find({owner: Meteor.user()._id}).fetch(); 
     onData(null, { userEarnings }); 
    } 
}; 

export default composeWithTracker(composer, Loading)(AuthenticatedNavigation); 

これは完璧にうまく機能していますしかし、理想的に私は、サーバー上でフィルタリングすることになります。

Meteor.publish('userEarnings',() => UserEarnings.find({ owner: this.userId })); 

残念ながら、これを実行しても結果は私がUserEarnings.find()を呼び出したときに、クライアント上で()をフェッチ返されません生み出します。なぜ誰がこのことが分かっているのですか?私はサインインしたユーザーがいるときだけ、クライアントから「userEarnings」を購読することに注意してください。

他にも関連性のある情報があるかどうかはわかりませんが、それがあると思われる場合は教えてください。

Meteor.publish('userEarnings',() => UserEarnings.find({ owner: this.userId })); 

へ::矢印機能を使って、あなたが設定しているので、最初のアプローチが機能しない理由

Meteor.publish('userEarnings', function userEarnings() { 
    return UserEarnings.find({ owner: this.userId }); 
}); 

理由である私は

答えて

2

変更は流星1.4を実行していますよパブリッシュ関数のコンテキストをコールバックにする。 Meteor.publishでは、コンテキストを正しく設定するために矢印以外の機能が必要です(また、this.userIdを適切に使用することができます)。

+0

ありがとうございました!私はそれを理解しようとしている私の髪を引っ張っていた。 – Swiss

関連する問題