【发布时间】:2016-12-02 06:20:14
【问题描述】:
AutoForm 在您想使用架构验证表单时效果很好,但通常表单不包含架构中的所有数据,因此您会收到验证错误。
例如,我有一个 submit 按钮在确定表单完全有效之前处于禁用状态,但由于表单不包含架构中的所有数据,因此它永远无法显示它完全有效。
假设你有一个架构
ShoppingCartSchema = new SimpleSchema({
itemsOrdered: {
type: [Object],
optional: false,
},
totalPrice: {
type: Number,
optional: false,
},
customerAddress: {
type: Object,
optional: false
},
systemGeneratedInfo: {
type: Object,
optional: true,
blackbox: true
},
});
ShoppingCarts.attachSchema(ShoppingCartSchema);
我的表单代码是这样的:
{{> quickForm collection="ShoppingCarts" id="shoppingCartForm" type="insert"}}
显然,您不希望 totalPrice 成为表单上的一个项目,供用户自行填写。 systemGeneratedInfo 可能是您的代码根据表单值生成的对象,但它不会出现在表单本身上。
您可以将totalPrice 放入隐藏的表单元素中,但这似乎很粗略。你真的不想用systemGeneratedInfo这样做。
还有哪些其他策略可以处理对象上未显示在表单上的项目,但仍允许前端显示的表单得到完全验证?
【问题讨论】:
-
这似乎类似于this posting。也许你可以采取类似的方法?
-
不,有点不同。这个问题一般是关于 autoform - 当表单本身不包含正在验证的对象需要拥有的所有数据时,如何验证用户看到的表单。
-
好吧,我希望对问题之间的相似之处有所不同。但是,直截了当地回答你,我不知道在 Autoform 中有什么方法可以简单地说“仅验证此表单的一部分,而忽略其余部分”。我能想到的唯一方法(在另一个问题的答案中涉及)是在模式中包含一些状态标志,您可以在自定义验证中使用它来打开/关闭给定字段的验证, 或将表单中的内容分解为单独的模式,以便它仅自行验证表单值。