Le paquet Meteor Autoform avec collection2 ne présente pas le formulaire

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:

  1. Fais-les facultatifs (probablement pas ce que vous voulez)
  2. Utilisez un schéma différent, l'un sans ces deux champs, pour l'attribut de schema de l'autoformation.
  3. Ajoutez un crochet "avant méthode" qui définit ces deux champs dans le document soumis.
  4. Utilisez 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; } });