流星错误:路径上缺少必需的参数缺少的参数是:[“_ id”]。传入的params对象是:{}

时间:2015-12-16 23:22:41

标签: meteor iron-router

我的路线中有这个:

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:

    {{#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 个答案:

答案 0 :(得分:2)

您需要在表单提交时明确go到其他路线。但由于您的按钮是submit,因此您还需要阻止默认的提交操作。

使用模板活动,您可以执行以下操作:

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

但是,既然您要自动挂钩,也许只需从按钮定义中移除type="submit"就可以了。