如何取消订阅收藏

How to unsubscribe from the collection?

本文关键字:收藏 取消 何取消      更新时间:2023-09-26

我的出版物:

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

我的订阅代码发生在点击按钮时(在templates.event中)

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

然而,问题是项目不会用新数据刷新,而是将新数据附加到旧列表中。如何取消订阅旧数据?

当您调用Meteor.subscribe时,它将返回一个订阅句柄。

您在句柄上调用stop以取消它。

例如,在您的活动中帮助

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

另一种方式是在Deps.autorun内部运行订阅;它将自动清理旧订阅。

例如,在您的事件处理程序中

Session.set('subscribe', true);

代码中的其他位置:

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

如果您呼叫Session.set('subsribe', false);,Meteor将自动取消/清除对items的订阅。

在我看来,这里有点混乱,当你连接到反应数据源时,你没有订阅特定的数据,所以当添加新记录时,它们当然会通过该连接附加到你的数据中。

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