【发布时间】:2015-05-15 01:21:18
【问题描述】:
我已经设置了模式,以便我可以拥有一组复杂的输入集。比如:
address = {
street:{
type: String
},
city: {
type: String
},
active_address: {
type: Boolean,
optional: true
},
...
}
people: {
name:{
type: String
},
address:{
type: [address],
optional: true,
defaultValue: []
}
}
这种方式添加地址是可选的,但如果您添加地址,则所有地址字段都是必需的。
这在(我相信是)版本 4.2.2 中有效。这仍然适用于insert 类型的自动表单,但不适用于update 类型的自动表单。进行更新时,除非嵌套架构中的 所有 必填字段也有效,否则不会提交任何字段。
作为参考,我正在创建这样的表单:
{{#autoForm collection="people" id=formId type="update" doc=getDocument autosave=true template="autoupdate"}}
{{> afQuickField name='name' template="autoupdate" placeholder="schemaLabel"}}
{{> afQuickField name='address' template="autoupdate"}}
{{/autoForm}}
我的模板 (autoupdate) 我复制粘贴了整个 bootstrap3 autoform 模板并重新排列了一些 html 以满足我的需要。我在更新时根据 5.0.0 更新日志尽我所能更新了这些。如果有人能想到模板中的一个属性,它可能会导致插入和更新之间的行为不一致,而在 5.0.0 中发生了变化。
更多信息
我刚刚尝试使用 5.0.2 中的 bootstrap3 模板重新创建我的所有表单模板。仍然是相同的行为。
+
我在地址架构中有一个布尔(复选框)输入。查看文档,地址数组填充有[0 : {active_address: false}]
active_address: {
type: Boolean,
optional: true
}
不确定这是否有帮助...
+
根据@mark 的建议,我添加了 defaultValue:[]。它解决了这个问题......有点。现在更新表单中没有“开放”的嵌套模式,并且可以更改其他值。如果您使用添加按钮将嵌套模式“添加”到表单中,则即使您未在任何字段中插入任何值,整个表单也将成为必需的。无论Boolean 类型输入如何,都会发生这种情况。
我可以确定嵌套模式中的Boolean 类型输入会导致整个嵌套模式成为执行插入所必需的。删除布尔输入会导致它再次可插入。因此,同样存在一个新问题。
这个新问题可以在here找到
【问题讨论】:
-
您要更新的文档是什么样的?地址字段中有
autoValue/defaultValue字段吗? -
@mark 我没有。您是在寻找实际的示例文档还是架构?
-
@mark 引起了我的思考,所以我查看了我的文档并添加了一些信息。
-
对,所以我认为活动地址输入是罪魁祸首。它导致 autoform 添加缺少所有必需字段(如街道和城市)的文档,这自然会导致模式验证失败。我以前没有亲自使用过布尔输入,但我怀疑 autoform 将未选中的框误认为是“假”而不是未定义。当我使用电脑时,我必须检查是否是这种情况。
-
@mark 我将设置一个测试,将该字段的输出覆盖为未定义而不是假...或者可能将其从 $set 对象中删除?我们会看到
标签: validation meteor nested schema meteor-autoform