我设置了模式,以便我可以通过autoform拥有一组复杂的输入集。就像是:
address = {
street:{
type: String
},
city: {
type: String
},
active_address: {
type: Boolean,
optional: true
},
...
}
people: {
name:{
type: String
},
address:{
type: [address],
optional: true,
defaultValue: []
}
}
通过这种方式添加地址是可选的,但如果您添加地址,则所有地址字段都是必需的。
尝试提交表单会为“地址”下的每个字段抛出一个必需的错误,除了Boolean
,即使未选中该复选框。
作为参考,我正在创建这样的表单:
{{#autoForm collection="people" id=formId type="insert" doc=getDocument autosave=true template="autoupdate"}}
{{> afQuickField name='name' template="autoupdate" placeholder="schemaLabel"}}
{{> afQuickField name='address' template="autoupdate"}}
...
{{/autoForm}}
我正在使用自定义表单模板,它非常基于bootstrap3
autoform 附带的表单模板。
试过了
尝试像这样添加一个钩子:
formToDoc:function(doc, ss, formId){
for (var i = 0, l = doc.address.length; i < l; ++i){
if (!doc.address[i].active_address){
delete doc.address[i].active_address;
};
}
return doc;
}
""
这解决了提交问题,但仍为其他值插入一个充满空字符串的数组。这会导致更新表单失控,类似于我在另一个问题中说明的内容。
问题是数组不是空的,而是有一个空值的对象。我可能会遍历表单中的每个值并删除所有字段,但这感觉非常笨拙且昂贵。