我已经通过AutoForm创建了一个表单。
就数据来源而言,我可以填写表格的一部分并使用:
AutoForm.getFormValues('form-id').insertDoc // returns the contents of the form
当我验证表单时,我可以这样做:
var formValues = AutoForm.getFormValues('form-id').insertDoc;
var isValid = MyCollection.simpleSchema().namedContext("myContext").validate(formValues);
// if isValid returns true, then I enable the Submit button
我想手动将信息添加到Autoform用于验证和提交到集合的任何对象中,而不是填写表单的某些部分。
例如,架构中的数据字段根本不需要出现在表单中。
购物车:
ShoppingCartSchema = {
totalPrice: {
type: Number,
optional: false
},
itemsSelected: {
type: [Object],
optional: false
}
};
itemsSelected
的数据显然是通过表单上的用户输入提供的。
totalPrice
的数据不应来自表单输入。它是在代码中生成的。
但是,在AutoForm将表单提交到集合之前,仍需要将totalPrice
验证为必填字段。
那么如何将totalPrice
添加到Autoform最终验证的对象上?
答案 0 :(得分:1)
如果您愿意,可以使用autovalue。
ShoppingCartSchema = new SimpleSchema({
'items': {
type: [Object],
},
'items.$.name': {
type: String
},
'items.$.price': {
type: Number
},
totalPrice: {
type: Number,
autoValue: function () {
if (this.field('items').isSet) {
let total = this.field('items').value.reduce(function (sum, item) {
return sum + item.price;
}, 0);
if (this.isInsert) {
return total;
} else {
return { $set: total };
}
}
}
},
});
答案 1 :(得分:0)
Autoform Hooks可以帮助您在将数据保存到Collection之前对其进行操作。
在你的情况下。
AutoForm.hooks({
form-id: { // The Autoform ID
onSubmit: function (insertDoc, updateDoc, currentDoc) {
if (customHandler(insertDoc)) { // Your Logic here
this.done(); // This is Required
} else {
this.done(new Error("Submission failed"));
}
return false;
}
}
});
更多信息请参阅Autoform Readme