Route to the new data submitted by Meteor autoform

2019-01-26 10:36发布

问题:

I'm using Meteor with AutoForm & Iron Router.

I have an autoform for inserting a data, and I want to redirect to the page of the data I added after a successful insert. How should I do it?

Here is the For:

{{#autoForm collection="Products" id="add" type="insert"}}
    <h4 class="ui dividing header">Products Information</h4>
      {{> afQuickField name='name'}}
      {{> afQuickField name='info'}}
    <button type="submit" class="ui button">Insert</button>
{{/autoForm}}

Iron Router:

Router.route('/products/:_id', {
  name: 'page',
  data: function() { return Products.findOne(this.params._id);}
});

Callbacks/Hooks

AutoForm.hooks({
  add: {
    onSuccess: function(doc) {
      Router.go('page', ???);
    }
  }
});

回答1:

The AutoForm hook will return you the docId. See: https://github.com/aldeed/meteor-autoform#callbackshooks

this.docId: The _id attribute of the doc attached to the form, if there is one, or for an type='insert' form, the _id of the newly inserted doc, if one has been inserted.

So use:

Router.go('page',{_id: this.docId});


回答2:

According to the doc on github, signatures changed: don't forget to declare the forms or null to apply the hooks.

for all forms

AutoForm.addHooks(null,{
    onSuccess: function(formType, result) {
        Router.go('page',{_id: this.docId});
    }
});

for specific form

AutoForm.addHooks(['yourForm'],{
    onSuccess: function(formType, result) {
        Router.go('page',{_id: this.docId});
    }
});

Best is to check the up to date signatures: https://github.com/aldeed/meteor-autoform#callbackshooks



回答3:

onSuccess: function(formType, result) {
    Router.go(
        ['adminDashboard', result, 'Edit'].join(''), 
        {_id: this.docId}
    );
},