Meteor Autoform package with collection2 does not submit the form

末鹿安然 提交于 2019-12-23 18:42:28

问题


I am using using collection2 and autoform with one level nested schemas

Node = new Meteor.Collection('node',{
schema: new SimpleSchema({
       content: {
           type: String,
           label: "Content",
           max: 200
       }
       created: {
           type: Date,
           label: "Created Date"
       },
       modified: {
           type: Date,
           label: "Modified Date"
       }
   })
});

NodeMeta = new Meteor.Collection('Node_meta',{
schema: new SimpleSchema({
    desc:{
        type:String,
        max:200,
        label:"Description",
        optional:true
    }
})

});

Schema = {};

Schema.nodeWithMeta= new SimpleSchema({
  Node: {
     type: Node.simpleSchema()
  },
  Meta: {
     type: NodeMeta.simpleSchema()
  }
});


{{#autoForm schema=schema id="nodeForm" type="method" meteormethod="nodecreate"}}
  {{> afFieldInput name='Node.content' rows=8 }}
  {{> afFieldInput name='Meta.desc' rows=8}}    
  <button type="submit" class="btn btn-primary btn-submit">Create</button>
{{/autoForm}}

Template.nodeCreate.helpers({
  schema: function() {
    return Schema.nodeWithMeta;
  }
});

It does not call server method. I tried autoform onSubmit hook as well as Meteors inbuilt templates 'submit' event handler. If I use jQuery onsubmit event handler, it registers the event. I cannot use jQuery for this purpose since autoform has to validate the inputs.


回答1:


Since created and modified are required fields, it's most likely not submitting because those fields are missing from the form, which means the form is invalid. There are actually a few different ways you can solve this:

  1. Make them optional (probably not what you want)
  2. Use a different schema, one without those two fields, for the schema attribute of the autoform.
  3. Add a "before method" hook that sets those two fields in the submitted doc.
  4. Use autoValue to generate the values for those two fields.

Since created and modified dates are fairly easy to do with autoValue, I would do it that way. Something like this:

created: {
    type: Date,
    label: "Created Date",
    autoValue: function () {
        if (this.isInsert) {
          return new Date;
        } else {
          this.unset();
        }
    }
},
modified: {
    type: Date,
    label: "Modified Date",
    autoValue: function () {
        if (this.isInsert) {
          this.unset();
        } else {
          return new Date;
        }
    }
}

Also, to help figure out issues like this more easily while developing, I recommend enabling debug mode.




回答2:


Have you allowed inserts/updates on your collection? See http://docs.meteor.com/#dataandsecurity.

I bet if you run the two commands below, it'll work.

meteor add insecure
meteor add autopublish 

Now try your submit.

If it does work, turn autopublish and insecure back off

meteor remove insecure
meteor remove autopublish

Then write your allow methods, e.g.

Node.allow({
  insert: function (userId, nodeDoc) {
    // write some logic to allow the insert 
    return true;
  }
});


来源:https://stackoverflow.com/questions/23156715/meteor-autoform-package-with-collection2-does-not-submit-the-form

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!