如何取消订阅收藏?

如何取消订阅收藏?

问题描述:

我的出版物:如何取消订阅收藏?

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

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

对我来说似乎有点混乱,当你连接到一个被动数据源时,你并没有订阅特定的数据,所以当新的记录被添加到课程中时,它们通过该连接被添加到你的数据中。

如果我理解了你的问题,并且希望新数据完全替换旧数据,我建议你不要在集合周围构建模板,而是围绕缓存版本的数据构建它(它将保存在一个对象并使用Deps进行反应),这样您就可以完全控制显示的数据。

+0

然而,如果有成千上万的项目,这不是一个好的建议,但由于显而易见的原因,这不是一个好的解决方案。 – 2014-09-01 00:04:37

+0

在问题中提供的查询仅限于1K结果,因此我认为我们一次只能处理1K个项目。 – 2014-09-01 09:04:11