我认为最好的解决方案是添加
defaultValue: []
到
address
字段。您在问题中描述的行为(不允许更新)实际上是有意的——继续阅读以了解原因。
问题是,只有当数组表单元素已经添加到表单中时,这种行为才存在。我的意思是,如果单击从表单中删除街道、城市等输入的减号,则更新成功,因为AutoForm不会将未选中的复选框误解为用户显式取消选中该框(因此将值设置为
false
). 设置
defaultValue
到一个空数组,让AutoForm知道除非用户明确单击了加号(即,他们有一个要输入的地址),否则不会显示地址表单,在这种情况下,需要填写街道、城市等字段。
请注意,这意味着您必须更新集合中缺少
住址
字段,并将其设置为空数组。在mongo外壳中有这样的东西:
db.people.update({ "address": { $exists: false } }, { $set: { "address": [] } }, { multi: true })
您可能希望通过首先在选择器上运行查找来确保查询正确。
编辑
如果您想要的行为是显示子窗体
没有
如果需要,可以使用
formToDoc
钩子并过滤掉所有只有
active_address
字段设置为
假的
(AutoForm错误地为我们添加的字段)。
AutoForm.addHooks('yourFormId', {
formToDoc: function (doc) {
doc.address = _.reject(doc.address, function (a) {
return !a.street && !a.city && !a.active_address;
});
return doc;
}
});
这个
表单到文档
每次验证表单时都会调用hook,因此您可以使用它来修改文档,使其成为自动表单,这样AutoForm甚至不会意识到存在地址子字段,除非设置了地址子字段的属性。请注意,如果您使用此解决方案,则无需添加
默认值:[]
如上所述。