我已设置schemas,以便通过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}}
我使用的自定义表单模板非常基于autoform附带的bootstrap3
表单模板。
试过
试图像这样添加一个钩子:
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;
}
这解决了提交问题,但仍然为其他值插入一个充满空字符串""
的数组。这导致更新表单变得混乱,类似于我的other question中所示的内容。
问题是数组不是空的,而是有一个空值的对象。我可能会在表单中的每个值上运行并删除所有字段,但这感觉非常hacky和昂贵。
答案 0 :(得分:0)
我上次评估时不正确。我已从人员架构中的地址字段中删除了defaultValue: []
。使用formToDoc
钩子中的以下代码来解决问题:
for (var i = 0, l = doc.address.length; i < l; ++i){
if (!doc.address[i].active_address){
doc.address[i].active_address = null;
}
}
return doc;