您如何仅在会话中的第一条路线上执行 waitOn?

How do you do a waitOn only on the first route in a session?

我有一些出版物想在页面加载时订阅一次,我希望第一个途径是等待这些订阅准备就绪。我不希望 waitOn 到 运行 用于未来的路线(就像全局 waitOn 那样),因为我正在使用 SubsManager,并且潜艇在未来的路线中保持活动状态。

作为参考,这是我目前正在做的事情:

Router.configure
  waitOn: ->
    sub_list = []

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

    sub_list

这样做的好处是 sub 不会在路由之间被拆除,但功能仍然 运行s。

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

subscriptions = null

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

这是一种解决方案。它不使用 waitOn 并且没有 loadingTemplate:

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

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

    c.stop()