Meteor AutoForm прекращает отправку
Я хотел бы создать форму, используя пакет автоформ для Meteor, для моего CAS_Entry
коллекция. Код можно увидеть ниже. Я также добавил определенные хуки, из которых, к сожалению, только beginSubmit
а также before
выполняются, и запись не добавляется в коллекцию. Используя оболочку Meteor, вставка работает как шарм.
Я благодарен за любую подсказку.
addCasEntry.html, Шаблон для отображения формы:
{{#autoForm collection="CAS_Entry" type="insert" id="addCasEntryForm"}}
{{> afQuickField name="type" options="allowed"}}
{{> afQuickField name="description" rows="6" type="textarea"}}
{{> afQuickField name="file" type="cfs-file" collection="Images"}}
{{> afQuickField name="date" }}
<button type="submit" class="btn btn-primary">Add</button>
{{/autoForm}}
addCasEntry.js, добавив отладочные хуки:
AutoForm.hooks({
addCasEntryForm: {
before: {
insert: function(doc) {
console.log(doc);
}
},
after: {
insert: function(error, result) {
console.log('Occured error: ' + error);
}
},
beginSubmit: function() {
console.log('begin submit');
},
onSuccess: function(formType, result) {
console.log("Insert succeeded");
console.log('Result ' + result);
},
onError: function(formType, error) {
console.log('Error!!!');
console.log(error);
}
}
});
SimpleSchema.debug = true;
/lib/collection/cas_entry.js:
CAS_Entry = new Mongo.Collection("cas_entries");
CAS_Entry.attachSchema(new SimpleSchema({
type: {
type: String,
allowedValues: ['reflection', 'evidence']
},
description: {
type: String,
optional: true
},
file: {
type: String,
optional: true,
},
timeUploaded: {
type: Date,
optional: true,
autoValue: function() {
return new Date();
}
},
date: {
type: Date,
}
}));
CAS_Entry.allow({
'insert': function() {
return true;
},
'update': function() {
return true;
}
});
А вот и вывод консоли:
1 ответ
Решение
Ваша форма не будет отправлена, потому что вы не возвращаете или не передаете документ this.result();
внутри вашего before
крюк.
AutoForm.hooks({
addCasEntryForm: {
// ...
before: {
insert: function(doc) {
console.log(doc);
return doc;
}
}
// ...
}
});
Согласно документации, вы должны использовать одно из следующих утверждений в зависимости от определенных вами предварительных условий:
- Синхронный, отправьте:
return doc;
, - Синхронный, отмена:
return false;
, - Асинхронный, отправьте:
this.result(doc);
, - Асинхронный, отмена:
this.result(false);
,