2016-09-21 172 views
0

我想知道是否有合適的方法來阻止客戶的訂閱。退訂流星應用程序發佈

例如,我有2頁,第一次訂閱客戶到users發表,第二次訂閱projects發表。

當客戶端從用戶頁面轉到項目頁面時,他仍然訂閱了用戶,儘管他並不需要它在項目頁面上。

所以我的第一個問題是:是否需要內存或CPU?當客戶訂閱越來越多的出版物時,他從路線走向路線。

而第二種:取消訂閱的正確方法是什麼? 例如,當他進入項目頁面時,取消訂閱用戶出版物。

我看到的一些軟件包就是這樣做的。例如reactive-table

預先感謝您!

回答

2

通常如果你想停止訂閱,你可以使用Meteor.stop()來完成。從引導,對如何stop subscriptions

如果調用Meteor.subscribe()有條件的反應性上下文中(例如,自動運行,或者在getMeteorData反應)或通過在火焰成分this.subscribe() ,那麼Meteor的反應系統會在適當的時候自動調用this.stop()。

因此通常您不必停止訂閱。它是自動完成的。例如,對於你的第一個問題,是的,取決於應用程序,它可能是CPU密集型的,這就是爲什麼你想在聊天應用程序中避免多個pub/sub的原因。

- 對於第二個問題,在您的情況下,您需要做的是模板級訂閱,而不是路由器級別,以便只將數據提供給您需要的模板。 See this example以瞭解如何使用流量路由器來完成此任務,同樣適用於其他路由器。

Template.blogPost.onCreated(function() { 
    var self = this; 
    self.autorun(function() { 
    var postId = FlowRouter.getParam('postId'); 
    self.subscribe('singlePost', postId); 
    }); 
}); 
+0

謝謝你的回答。它正是我想要實現的。 但現在,它看起來像在訂閱前呈現html。 並且沒有任何來自助手的數據被呈現。 我試過'{{#if Template.subscriptionsReady}}',但仍然沒有結果。 你能幫忙嗎? – Robert

+0

這很難說。可能有什麼地方出了問題。在這種情況下幫助我的是msavin:mongol。使用ctl + M,您可以在您的頁面上看到您的訂閱內容。所以首先確保你確實在每個頁面上訂閱你想要的集合。 – Kostas