J'utilise using collection2 et autoforme avec un niveau de schéma imbriqué
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; } });
Il n'appelle pas la méthode du serveur. J'ai essayé autoformer surSubmettre le crochet ainsi que le gestionnaire d'événements «soumettre» des modèles Meteors inbuilt templates. Si j'utilise le gestionnaire d'événements jQuery onsubmit, il enregistre l'événement. Je ne peux pas utiliser jQuery à cet effet car Autoform doit valider les entrées.
Puisque les champs created
et modified
sont obligatoires, il est très probable qu'ils ne se soumettent pas parce que ces champs sont absents du formulaire, ce qui signifie que le formulaire n'est pas valide. Il existe en fait quelques façons différentes de résoudre ceci:
schema
de l'autoformation. autoValue
pour générer les valeurs pour ces deux champs. Puisque les dates créées et modifiées sont assez faciles à utiliser avec autoValue , je le ferais de cette façon. Quelque chose comme ça:
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; } } }
En outre, pour aider à résoudre des problèmes comme celui-ci plus facilement tout en développant, je recommande d'activer le mode de débogage .
Avez-vous permis des insertions / mises à jour sur votre collection? Voir http://docs.meteor.com/#dataandsecurity .
Je parie que si vous exécutez les deux commandes ci-dessous, cela fonctionnera.
meteor add insecure meteor add autopublish
Essayez maintenant votre soumission.
Si cela fonctionne, éteignez automatiquement et désactivez-vous
meteor remove insecure meteor remove autopublish
Ensuite, écrivez vos méthodes autorisées, par exemple
Node.allow({ insert: function (userId, nodeDoc) { // write some logic to allow the insert return true; } });