我有一个带有waitOn
挂钩的路由,返回Meteor.subscribe
。每次触发路线时,在看到实际数据之前,我会短暂地看到loadingTemplate
的微调器。
我原本以为我只需等待订阅下载一次,即第一次?
如果我做错了,请建议一个更好的方法。
答案 0 :(得分:7)
查看this issue上的最新评论。 Chris解释说,一旦您离开激活它们的路线,您的路由器发起的订阅将被停止。这意味着更改路线会导致您的订阅不断启动和停止,这可以解释您所看到的行为。以下是一些选项:
将订阅放入路由器可以延迟订阅,直到需要它为止。但是你也要支付在路线运行之前没有数据的惩罚。考虑在路由器之外激活一些订阅,如下所示:
Tracker.autorun(function() {
if (Meteor.user()) {
Meteor.subscribe('posts');
}
});
您可以将订阅添加到路由的before
挂钩中。请参阅示例here。当您需要数据但无需等待时,您可以获得订阅的好处。缺点是您可能需要在代码中添加一些guards以防止数据未被加载。
请查看subs-manager(文档here)。它是一个旨在帮助解决这个问题的软件包。我们在生产中使用它,它确实有助于增加我们在路线之间的订阅重用。一句忠告 - cacheLimit
和expireIn
具有相当保守的默认值,因此如果您有很多共享订阅,则应考虑增加这些订阅。
答案 1 :(得分:1)
mizzao 发布了对已接受的答案的替代答案,作为对铁路由器下this issue的评论:
只要在路由加载之前命中了订阅,就可以将其传递给路由器等待。我通常把我的所有订阅 - 包括自动运行的和订阅路由器的订阅 - 放到一个文件中,然后让相关的数组等待。即使全局订阅只要存储回文件的闭包中,这也是可以的。