Железный роутер data findOne возвращается неопределенным

У меня есть streams настройка публикации и подписки, но по какой-то причине, если я сделаю следующее в моем маршруте, представление не получит данных:

Router.route '/seasons/:season/episodes/:episode',
    name: 'episode'
    action: ->
        @render(
            'episode',
            data: ->
                Streams.findOne({season: @params.season, episode: @params.episode})
        )

Если я регистрирую параметры, они там, как и ожидалось, и делают findOne вручную либо через БД, либо через консоль браузера возвращает данные, как и ожидалось.

Если я удаляю params, то он просто делает Streams.findOne() данные возвращают первое stream из базы данных и представление имеет доступ к нему, как и ожидалось. Я действительно не уверен, что здесь происходит.

1 ответ

Вероятно, вам нужно подождать публикации потоков, прежде чем пытаться получить доступ к данным: механизм Pub/Sub в Meteor асинхронный, когда вы подписываетесь на некоторые данные, вы не сразу получаете их обратно в браузере из-за основного клиента / сервера задержка.

Попробуйте реорганизовать ваш код следующим образом:

Router.route '/seasons/:season/episodes/:episode',
  name: 'episode'
  template: 'episode'
  data: ->
    Streams.findOne({season: @params.season, episode: @params.episode})
  waitOn: ->
    Meteor.subscribe 'streams', @params.season, @params.episode
Другие вопросы по тегам