2016-08-14 68 views
0

我有一個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'。

我不確定是否有任何其他信息是相關的,但請讓我知道,如果你認爲有。我跑流星1.4

回答

2

變化:

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

到:

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

爲什麼第一種方法是不工作的原因是因爲通過你設置一個箭頭功能發佈函數的上下文是回調。 Meteor.publish需要非箭頭功能才能正確設置上下文(並允許您正確使用this.userId)。

+0

非常感謝!我正試圖弄清楚這件事。 – Swiss

相關問題