Я немного новичок в железном маршрутизаторе, но мне любопытно, есть ли обработчик событий, который я могу определить после загрузки маршрута. Если я попытаюсь вызвать Router.current().data() в Meteor.startup, я получу 'undefined' для Router.current(). Я хотел бы знать «правильный» способ начать что-то делать после загрузки данных на этом маршруте...
Событие «загружено» маршрута железного маршрутизатора
Ответы (1)
Код, который вы используете, в порядке - Router.current().data()
.
Проблема в том, что здесь есть состояние гонки. Здесь происходят две вещи: Meteor.startup может запускаться до или после того, как маршрутизатор решит, на каком маршруте он находится. Если он запускается до загрузки маршрута, Router.current()
будет null
.
Возможно, вы захотите вместо этого поместить свой код в onAfterAction
вашего маршрута. Таким образом, он также будет работать на правильной странице. Router.current().data()
вернет неправильные данные по другому маршруту.
Еще одна вещь, о которой следует помнить, это то, что с Meteor вы сначала загружаете html, js и css и загружаете их. Затем данные приходят позже, поэтому, когда вы ищете данные при загрузке страницы, вам нужно сначала дождаться их, иначе у вас ничего не будет.
Iron Router также имеет хук под названием onData
, который реактивно перезапускается при изменении data()
соответствующего маршрута. Вы можете использовать это, чтобы убедиться, что у вас есть данные, и запустить их после того, как все загрузится должным образом.