Ошибка метеора: на пути отсутствуют обязательные параметры. Отсутствуют следующие параметры: ["_id"]. Переданный объект params был: {}

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

Router.map(function() {
...
    this.route('studentEdit', {
        path: '/student/:_id/edit',
        data: function() {
            return Students.findOne(this.params._id);
        },
    });

    this.route('studentDetail', {
        path: '/student/:_id',
        data: function() {
            return Students.findOne(this.params._id);
        }
    });

...

});

И у меня есть это в моем шаблоне с помощью автоформы:

    {{#autoForm collection="Students" id="studentEdit" doc=this type="update"}}
        {{> afQuickField name='name'}} 
        {{> afQuickField name='phone'}} 
        {{> afQuickField name='address' rows=6}} 
        {{> afQuickField name='remarks' rows=6}}
    <button type="submit" class="btn waves-effect waves-light"><i class="material-icons">save</i></button>
    {{/autoForm}}

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

Exception in delivering result of invoking '/students/update': Error: Missing required parameters on path "/student/:_id". The missing params are: ["_id"]. The params object passed in was: {}.

ОБНОВЛЕНИЕ Маршрутизация на страницу сведений теперь работает, но ошибка все еще существует в консоли. Я должен что-то упустить. Вот что я сделал, чтобы заставить это работать пока:

var moveOnRouter = {
    onSuccess: function(formType, result) {
        Router.go('studentDetail', {_id: this.docId});
    }
}

AutoForm.addHooks('studentEdit', moveOnRouter);

1 ответ

Решение

Вам нужно явно go на другой маршрут при отправке из вашей формы. Но так как ваша кнопка submit Вы также должны предотвратить действие отправки по умолчанию.

С шаблонными событиями вы бы сделали что-то вроде:

Template.myTemplate.events({
  'submit .btn'(ev) {
    ev.preventDefault();
    router.go('studentDetail',{ _id: this.docId });
  }
});

Но так как вы подключаете автоформу, возможно, легче просто удалить type="submit" из вашего определения кнопки.

Другие вопросы по тегам