2014-08-31 42 views
2

我的出版物:如何取消訂閱收藏?

Meteor.publish('items', function() { 
    return Items.find({}, {skip: randomNumber, limit: 100}); 
}); 

我申購代碼時,點擊(在templates.event)按鈕

Meteor.subscribe('items'); 
Items.find().fetch(); 

然而,問題是,項目不與新的數據刷新發生,但是新數據會附加到舊列表中。我能做些什麼來取消訂閱舊數據?

+1

在這裏你有一個工程的例子:http://meteorpad.com/pad/fwka2h9mAi2vLFysv。只需在訂閱之前取消訂閱。 – 2014-09-01 06:14:02

回答

4

When you call Meteor.subscribe it will return a subscription handle.

您在處理呼叫stop取消它。

例如,在事件幫手

if (SomeGlobalVar){ 
    SomeGlobalVar.stop(); 
} 
SomeGlobalVar = Meteor.subscribe('items'); 

The other way is to run the subscription inside Deps.autorun;它會自動清理舊訂閱。

例如,在你的事件處理程序

Session.set('subscribe', true); 

其他地方在你的代碼:

Deps.autorun(function(){ 
    if (Session.get('subscribe')){ 
    Meteor.subscribe('items'); 
    } 
}); 

如果你打電話Session.set('subsribe', false);流星將自動取消/清理該訂閱items

1

對我來說似乎有點混亂,當你連接到一個被動數據源時,你並沒有訂閱特定的數據,所以當新的記錄被添加到課程中時,它們通過該連接被添加到你的數據中。

如果我理解了你的問題,並且希望新數據完全替換舊數據,我建議你不要在集合周圍構建模板,而是圍繞緩存版本的數據構建它(它將保存在一個對象並使用Deps進行反應),這樣您就可以完全控制顯示的數據。

+0

然而,如果有成千上萬的項目,這不是一個好的建議,但由於顯而易見的原因,這不是一個好的解決方案。 – 2014-09-01 00:04:37

+0

在問題中提供的查詢僅限於1K結果,因此我認爲我們一次只能處理1K個項目。 – 2014-09-01 09:04:11