0

我设置了模式,以便我可以通过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}} 

我正在使用自定义表单模板,它非常基于bootstrap3autoform 附带的表单模板。

试过了

尝试像这样添加一个钩子:

 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;
  }

""这解决了提交问题,但仍为其他值插入一个充满空字符串的数组。这会导致更新表单失控,类似于我在另一个问题中说明的内容。

问题是数组不是空的,而是有一个空值的对象。我可能会遍历表单中的每个值并删除所有字段,但这感觉非常笨拙且昂贵。

4

1 回答 1

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;
于 2015-03-17T20:16:47.987 回答