Collection.findOne() не возвращает никаких результатов в Template.created

У меня есть шаблон, который представляет собой простую форму редактирования. _id редактируемого документа входит в переменную сеанса (устанавливается mini-pages из URL-адреса: http://example.com/items/4zt4z3t3t). В функции Template.editForm.created я пытаюсь получить соответствующий документ из коллекции, используя ItemCollection.findOne({_id:_id}). _id установлен правильно во всех случаях.

Когда я перехожу к http://example.com/4zt4z3t3t и отлаживаю функцию created, ItemCollection.findOne() возвращает undefined, хотя в коллекции есть элементы. Поэтому я никогда не могу найти свой предмет по _id. Кроме того, когда я перемещаю процедуру поиска элемента на этап маршрутизации, также нет результата для поиска. Позже коллекция работает, как и ожидалось.

Любые указатели?


person wackazong    schedule 28.06.2013    source источник
comment
Я провел еще один анализ: когда я вызываю URL-адрес напрямую (не через Meteor.go), кажется, что mini-pages вызывает страницу два раза. В первый раз Коллекция не определяется. Кажется, проблема с mini-pages.   -  person wackazong    schedule 28.06.2013


Ответы (1)


Meteor использует принцип передачи данных. Это означает, что когда ваш HTML загружается, ваши данные не отправляются вместе с ним, по крайней мере, изначально.

Поэтому вы не можете получить доступ к данным в функции .created, если только вы не ожидаете, что этот шаблон будет загружен после загрузки данных. Вот почему он сначала возвращает undefined, но если вы проверите позже, он там.

Вы также можете дождаться обратного вызова от подписки, когда данные будут завершены, а затем загрузить шаблон.

OR

Используйте реактивность в своем шаблоне и дайте ему загрузиться пустым, и автоматически заполните его данными, когда данные поступят (действительно самый простой способ). Получите доступ к своим данным в шаблоне и используйте помощник руля для заполнения данных и используйте обратный вызов .rendered для внесения любых изменений после этого.

person Tarang    schedule 28.06.2013
comment
Я выбрал второе решение и использовал помощника, который делает findOne, когда это действительно необходимо в шаблоне. Тем не менее, когда я загружаю URL-адрес, я быстро мерцаю пустой формой, а затем формой с данными. Я думаю, что это проблема с мини-страницами, загружающими страницу два раза. - person wackazong; 28.06.2013