Search code examples
meteoriron-routermeteor-autoform

Meteor autoform display a specific submission


I am using meteor autoform and iron:router to create a form that redirects to the form _id on submit (i.e localhost3000/submit/_id. That all works great but what I want to do now is make it so my template only displays that forms results not all of them.

here is the code I currently have

HTML:

  <div class="displayBox">
    {{#each Submits}}
        {{> formDisplay}}
    {{/each}}
  </div>

<template name="formDisplay">

  <h1>
      {{title}}
      {{subject}}
      {{summary}}
  </h1>

</template>

Hook:

AutoForm.addHooks('insertSubmit', {
  onSuccess: function(doc) {
    Router.go('formDisplay',{_id: this.docId});
  }
})

Routing:

Router.route('/submit', {
  layoutTemplate: 'submitLayout',
  waitOn: function() { return Meteor.subscribe("Submits"); },
  loadingTemplate: 'loading'
});

Router.route('/submit/:_id', {
  name: 'formDisplay',
  data: function() { return Products.findOne(this.params._id);},
  waitOn: function() { return Meteor.subscribe("Submits"); },
  loadingTemplate: 'loading'
});

Form:

SubmitSchema  = new SimpleSchema({
  title: {
    type: String,
    label: "Title"
  },
  subject:{
    type: String,
    label: "subject"
  },
  summary:{
    type: String,
    label: "Summary"
  },
  author:{
    type: String,
    label: "Author",
    autoValue: function() {
      return this.userId
  },
  autoform: {
    type: "hidden"
  }
},
  createdAt: {
    type: Date,
    label: "Created At",
    autoValue: function(){
      return new Date()
    },
    autoform: {
      type: "hidden"
    }
  }
});

Submits.attachSchema( SubmitSchema );

Solution

  • You need to add a id filter into your publication which only return you the current specific doc.

    Your route code:

    Router.route('/submit/:_id', {
      name: 'formDisplay',
      data: function() { return Products.findOne(this.params._id);},
      waitOn: function() { return Meteor.subscribe("Submits", { '_id': this.params._id } ); },
      loadingTemplate: 'loading'
    });
    

    Your publication code :

    Meteor.publish('tasks', function(filter) {
      filter = ( filter ? filter : {} );
      return Products.findOne(filter);
    });