我有一个模板,其中用户应该能够点击按钮以显示模态,并且在模式中从大约10,000个项目的列表中选择一些项目,这些项目在那里显示以进行搜索或滚动
因为这个系列太大了,所以当我不绝对需要时,我不想把它留在记忆中。
因此,我只想在查看模式时订阅此集合,并且我希望确保在未查看模式的情况下取消订阅。
有没有办法明确取消订阅集合?
答案 0 :(得分:3)
有几种方法可以做到这一点:
subscribe会返回一个可以调用stop
的句柄。例如:
var handle = Meteor.subscribe('stuff');
handle.stop();
因为autorun
会在其响应式依赖关系发生变化时自动启动和停止订阅,因此可以使用:
Tracker.autorun(function () {
if (Session.get('showingModal'))
Meteor.subscribe('stuff');
});
旁注 - 使用方法调用来搜索如此大的数据集而不是将整个事物发布到客户端可能更有意义。例如,您可以在用户查询更改时设置会话变量,然后使用autorun
根据方法的返回值更新结果集。
答案 1 :(得分:1)
https://docs.meteor.com/#/full/meteor_subscribe
引用文档:
Meteor.subscribe返回订阅句柄,该句柄是一个对象 使用以下方法:
stop()取消订阅。这通常会导致 服务器指示客户端从中删除订阅的数据 客户的缓存。
所以基本上你需要做的是将订阅句柄存储在一个变量中,当你不再需要那些已发布的文档时调用stop
方法。
请注意,如果您正在使用iron:router
(并且您可能应该这样做),那么每次路线更改时都会自动为您处理,这很方便,但副作用却引发了很多不必要的调用Meteor.publish
次调用对于服务器和带宽来说都是微不足道的...为了解决这个问题,您可以使用meteorhacks:subs-manager
,但这仍然是另一个主题。