你如何只在会话的第一条路线上做waitOn?

时间:2015-06-18 14:45:52

标签: meteor iron-router

我有一些出版物,我想在页面加载时订阅,我想要的第一条路线是等待这些潜艇准备就绪。我不希望waitOn为将来的路线运行(正如全局waitOn所做的那样),因为我使用了SubsManager,并且潜艇对未来的路线保持活动状态。

供参考,以下是我目前正在做的事情:

Router.configure
  waitOn: ->
    sub_list = []

    for name in SUB_NAMES
      sub = home_subs.subscribe name
      sub_list.push sub

    sub_list

它的好处是没有在路线之间拆除潜艇,但功能仍在运行。

2 个答案:

答案 0 :(得分:1)

看来你正在做的事情很好。当再次调用waitOn时,SubsManager将知道不重新订阅。每次路由更改时都会(并且应该)调用waitOn,以便当前路由依赖于准备好的订阅。如果你想避免重新创建sub_list,你可以懒洋洋地创建它并像这样存储它。

subscriptions = null

Router.configure
  waitOn: ->
    unless subscriptions?
      subscriptions = for name in SUB_NAMES
        home_subs.subscribe name
    subscriptions

答案 1 :(得分:0)

这是一个解决方案。它不使用waitOn,也没有loadingTemplate

Router.configure autoStart: false
Tracker.autorun (c) ->
  if sub.ready()

    # don't know why defer is necessary
    _.defer ->
      Router.start()

    c.stop()