javascriptmeteormeteor-autoformsimple-schemameteor-collection2

How to populate Meteor autoform options with objects


I have a simple schema defined for collection:

testReport = new SimpleSchema({
  name : {
    type: String,
    label: "Your Name"   

  },
  school : {
    type: Object,
    label: "Your School"
  },
  "school.$.name" : {
    type: String
  },
  "school.$.region" : {
    type: String
  }

}, { tracker: Tracker });

Reports.attachSchema(testReport);

This schema is used via autoform to generate very simple form that is saved to Reports collection:

   {{#autoForm collection=Collections.Reports id="form" type="insert"}}
        {{> afQuickField name="name" }}
        {{> afQuickField name="school" options=schoolOptions}}
        <input type="submit" value="Submit">
   {{/autoForm}}

A simple helper is used to autopopulate options dropdown with data from collection:

schoolOptions: function () {
    if (Meteor.userId()) {
      Meteor.user().profile.schools)
            return Meteor.user().profile.schools.map(function (c) {
                return {label: c.name, value: JSON.stringify({ name: c.name, region: c.region})};
      });
    }
  }

Everything is rendering successfully but when I click submit I get an error on School field that says

"Your School must be of type Object"

I did try couple of refactoring but nothing works. Usually in the "value" field of options dropdown we put only a String, Number etc. But I want to pass an object here (which is returned by helper) The object looks like.

{"name":"someSchoolName","region":"someRegion"}

So the final document inserted into Collection should look like:

{  
  "name": "John",
  "school": {"name":"someSchoolName","region":"someRegion"}
}

Can anyone please help with this? Many thanks in advance!


Solution

  • In your schema, change this

    "school.$.name" : { type: String},"school.$.region" : {type: String}

    to "school.name" : {type:String},"school.region" : {type: String}