路由器waitOn等待每个渲染的订阅

dal*_*ard 5 collections meteor iron-router

我有一个带waitOn钩子的路线返回一个Meteor.subscribe.每次触发路线时,loadingTemplate在看到实际数据之前,我都会看到我的短暂旋转器.

我本以为我只需要等待订阅下载一次,即第一次?

如果我做错了,请建议一个更好的方法.

Dav*_*don 7

看看关于这个问题的最后评论.Chris解释说,一旦您离开激活它们的路线,您的路由器发起的订阅将被停止.这意味着更改路线会导致您的订阅不断启动和停止,这可以解释您所看到的行为.以下是一些选项:

在路由器外部开始订阅

将订阅放入您的路由器有利于延迟订阅,直到需要它为止.但是你也要支付在路线运行之前没有数据的惩罚.考虑在路由器之外激活一些订阅,如下所示:

Tracker.autorun(function() {
  if (Meteor.user()) {
    Meteor.subscribe('posts');
  }
});
Run Code Online (Sandbox Code Playgroud)

不要等待订阅

您可以将订阅添加到路径的before挂钩中.请参阅此处的示例.当您需要数据但无需等待时,您可以获得订阅的好处.缺点是您可能需要在代码中添加一些防护,以防止您的数据尚未加载.

使用订阅管理器

看看子经理(这里的文档).它是一个旨在帮助解决这个问题的软件包.我们在生产中使用它,它确实有助于增加路由之间的订阅重用.建议的一个字-的cacheLimitexpireIn具有相当保守的默认值,所以如果你有很多共享的订阅,你应该考虑增加这些.