Подписка пользователей Meteor Iron-Router подписывается недостаточно быстро? Загружает данные подписки предыдущего маршрута

У меня есть это в моем маршрутизаторе:

Router.configure
  layoutTemplate: 'layout'
  loadingTemplate: 'loading'

Router.map () ->
  @route 'home',
    path: '/'
    waitOn: ->
      Meteor.subscribe('users')
      Meteor.subscribe('instruments')
      Meteor.subscribe('instrumentList')
    data: ->
      Meteor.users.find().fetch()

  @route 'edit_form',
    path: 'edit_profile'
    waitOn: ->
      Meteor.subscribe('user', Meteor.userId)
      Meteor.subscribe('users')
      Meteor.subscribe('instruments')
      Meteor.subscribe('instrumentList')
    data: ->
      Meteor.user()

Router.onBeforeAction("loading")

home — это карта GoogleMap, на которой отображаются отброшенные булавки всех пользователей в системе.

home необходимо подписаться на всю коллекцию users.

edit_form — это форма для текущего пользователя, вошедшего в систему.

edit_form нужно подписаться только на current_user документ.

  1. Когда я впервые захожу на home, на карте отображаются все контакты каждого пользователя.
  2. Затем я перехожу к edit_form, и он показывает всю информацию для текущего пользователя.
  3. Затем я возвращаюсь обратно к карте, и она показывает только булавку для текущего пользователя.

Что тут происходит? Почему маршрут home на шаге 3 теперь отображает только контакты для текущего пользователя, хотя я специально сказал ему waitOn подписаться на всю коллекцию users И использовать данные из Meteor.users.find().fetch(), которые должны получать каждого пользователя в коллекции?


person fuzzybabybunny    schedule 04.07.2014    source источник


Ответы (1)


Я думаю, что с тем, как вы написали waitOn, он будет ждать только последнее (coffeescript возвращает последнее из функции). так что в вашем случае он будет ждать только Meteor.subscribe('instrumentList')

вернуть все подписки в массиве.

person Keith Nicholas    schedule 04.07.2014
comment
Вы совершенно правы. Gah..... У меня была точно такая же проблема раньше в другом проекте, и я применил то же решение, которое вы только что описали. И я забыл сделать это для текущего проекта. На самом деле, я забыл, как работает javascript... вы можете вернуть только одно значение в функции JS, потому что return запускается только один раз - если вы хотите вернуть несколько вещей, вы должны обернуть их в объект или массив. - person fuzzybabybunny; 04.07.2014