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');
}
});