我有以下(简化)SimpleSchema:
EventSchema = new SimpleSchema({
eventType: {
type: String
},
kicker: {
type: String
},
kicker2: {
type: String,
optional: true
}
});
这样我就可以使用AutoForm生成插入表单。以下是它的简化版本:
{{#autoForm schema="EventSchema" type="method" meteormethod="addEvent"}}
{{> afFieldInput name="eventType" options=getSubstitutionEventTypes type="select-radio-inline"}}
{{> afFieldInput name="kicker" type="select" options=this}}
{{> afFieldInput name="kicker2" type="select" options=this}}
{{/autoForm}}
由于我在其他autoForm中使用此Schema而我不必输入" kicker2",我已将此字段设置为可选。但是在上面提到的形式中,这个领域也是必需的。那么如何覆盖特定表单中字段的可选设置呢?
我已经尝试过以下操作,但它没有工作(要求不在HTML中呈现):
{{> afFieldInput name="kicker2" type="select" options=this required="required"}}
提前致谢!
答案 0 :(得分:0)
你有一些技巧可以根据情况设置一个可选值,一个好的方法是在函数返回时设置可选值,给出如下内容:
EventSchema = new SimpleSchema({
eventType: {
type: String
},
kicker: {
type: String
},
kicker2: {
type: String,
optional: function() {
return (! this.isInsert)
}
}
});
因此它在更新时是可选的,但在插入时不是(您可以使用任何方法来自定义它)。
在表单之间使用不同验证规则的另一种方法是,只需为给定表单创建特定架构,然后使用autoForm(schema=yourSpecificSchema ...
而不是autoForm(collection="Meteor.users"
。不要忘记注册帮助程序,以便可以从表单中访问您的架构。您可以参考官方文档了解更多详情:https://github.com/aldeed/meteor-autoform#non-collection-forms