Javascript 如何取消订阅该系列?

Javascript 如何取消订阅该系列?,javascript,meteor,Javascript,Meteor,我的出版物: Meteor.publish('items', function() { return Items.find({}, {skip: randomNumber, limit: 100}); }); 单击按钮时发生的我的订阅代码(在templates.event中) 但是,问题是项目不会用新数据刷新,而是将新数据附加到旧列表中。如何取消订阅旧数据? 您可以在手柄上调用stop,取消它 例如,在你的活动中 if (SomeGlobalVar){ SomeGlobalVar.

我的出版物:

Meteor.publish('items', function() {
    return Items.find({}, {skip: randomNumber, limit: 100});
});
单击按钮时发生的我的订阅代码(在templates.event中)

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

您可以在手柄上调用
stop
,取消它

例如,在你的活动中

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

它将自动清理旧订阅

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

Session.set('subscribe', true);
在代码的其他地方:

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

如果调用
Session.set('subscribe',false)
Meteor将自动取消/清理对
项目的订阅

在我看来,这里似乎有点混乱,当您连接到一个被动数据源时,您并没有订阅特定的数据,所以当添加新记录时,它们当然会通过该连接附加到您的数据中


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

这是一个不错的建议,但是,当有数千个项目时,由于明显的原因,这不是一个很好的解决方案。问题中提供的查询仅限于1K个结果,因此我假设我们一次只处理1K个项目。这里有一个有效的示例:。只需取消订阅,然后再订阅。
Deps.autorun(function(){ 
  if (Session.get('subscribe')){
     Meteor.subscribe('items');
  }
});