2016-03-16 5 views
0

, вероятно, это не имеет никакого отношения к autoform, но, поскольку я не совсем уверен, я думал, что я тоже поместил эту информацию. В моей форме я не получаю заранее заполненных полей, которые я ожидаю от формы обновления, а также есть какой-то странный вывод в моей консоли, который я не понимаю.meteor iron-router с автоопубликованием, не получая заполненные поля в форме обновления

Соответствующая маршрутизатор часть:

// app/lib/routes.js 
Router.route('/assignment/:_id', function(){ 
    var assignment = Assignments.findOne({_id: this.params._id}); 
    console.log('ass w/' + this.params._id); 
    console.log(assignment); 
    this.render('Assignment', {data: assignment}); 
}, {name: 'assignment.show', 
    waitOn: function(){ 
     console.log('do the wait'); 
     Meteor.subscribe('assignments'); 
    } 
    } 
); 

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

Publishing сделан здесь:

// app/server/publish.js 
Meteor.publish('assignments', function() {return Assignments.find();}) 

Теперь этот код, кажется, называется несколько раз. Общий выход после того, как попасть в этот маршрут является:

do the wait 
routes.js:22 ass w/M2gtLf9vbbWCTgxze 
routes.js:23 undefined 
debug.js:41 insert failed: Access denied. No allow validators set on restricted collection for method 'insert'. 
routes.js:27 do the wait 
routes.js:22 ass w/M2gtLf9vbbWCTgxze 
routes.js:23 Object {_id: "M2gtLf9vbbWCTgxze", title: "Neuer Titel", priority: "high", description: "just do it"} 

(Ошибка вставки, вероятно, происходит из другого места) Там могут быть некоторые другие ошибки в там, тоже, но я надеюсь, что выход показывает проблему. То, что я не получаю, состоит в том, что я, кажется, не получаю задание сначала, но во втором вызове оно получено, что для меня странно (почему это происходит?). Я не уверен в структурах папок, но не вызывается public.js после route.js, так что может быть что-то неопубликованное? Если да, то куда поместить мои файлы?

Вероятно, не важно, но это мой assignment.html

<template name="Assignment"> 
    <div class="panel panel-default" id="main"> 
     <div class="panel-heading">Change Assignment</div> 
     <div class="panel-body"> 
      {{>quickForm collection="Assignments" id="updateAssignmentForm" type="method" meteormethod="updateAssignment"}} 
     </div> 
    </div> 
</template> 

Итак, почему маршрутизатор вызывается дважды, почему не существует никакого вывода на первом и почему я не получаю укажи поля здесь? (все поля просто пусты в моей форме)

ответ

2

Функция маршрута запускается до того, как подписка вернула данные. Вы можете просто положить это в функцию data, и он будет ждать:

Router.route('/assignment/:_id',{ 
    data: function(){ 
    return Assignments.findOne({_id: this.params._id}); 
    }, 
    name: 'Assignment', 
    waitOn: function(){ 
    return Meteor.subscribe('assignments'); 
    } 
}); 
+0

этот синтаксис мне кажется лучше! Однако, когда я добавляю некоторые 'console.log ('called');' в функцию данных, он будет выводиться дважды, снова. Зачем? – IceFire

+0

См. Http://stackoverflow.com/questions/25099549/meteor-why-is-iron-routers-onbeforeaction-called-multiple-times –

+0

Я обновил ответ, чтобы вернуть дескриптор подписки, это важно! Также вы можете извлечь выгоду из этого сообщения http://0rocketscience.blogspot.com/2015/08/meteor-build-clean-easy-to-maintain.html –

 Смежные вопросы

  • Нет связанных вопросов^_^