电子邮件上的 Meteor Collection2 验证显示为对象而不是字符串
Meteor Collection2 validation on emails displays as object but not as string
我刚开始使用 Meteor 和 autoform。我创建了一个快速表单调用的架构。问题是我无法弄清楚如何在没有数组组包装器的情况下对特定数组索引进行验证。如果我在下面使用这种类型的模式,我可以得到验证,但它需要一个对象,我正在寻找一个字符串。如果我将类型更改为 String,则根本不会显示验证。任何帮助是极大的赞赏。
schema.js
Schema.NewUser = new SimpleSchema({
"profile.organization" : {
type: String,
regEx: /^[a-z0-9A-z .]{3,30}$/,
optional: true,
label: "Company"
},
emails: {
type: Object,
label: "Email",
},
"emails.$":{
type: Object,
},
"emails.$.address": {
type: String,
label: "Email",
regEx: SimpleSchema.RegEx.Email,
},
parent: {
type: String,
optional: true,
},
roles: {
type: Array,
optional: true
},
'roles.$': {
type: String,
allowedValues: [
'owner',
'admin'
],
optional: true,
label: "Choose a number",
autoform: {
options: [
{
label: "owner",
value: "owner"
},
{
label: "admin",
value: "admin"
}
]
}
}
});
html
{{> quickForm collection="Meteor.users" id="insertUserForm" type="method" meteormethod="insertUser" schema="Schema.NewUser" fields="profile.organization, emails.0.address, roles.0" }}
我最终通过使用 afFieldInput 从 quickField 切换到 autoform 来解决这个问题。这可以选择使用 afFieldIsInvalid 检查字段是否有效。我用它来检查父电子邮件字段以进行验证,但仍然使用索引特定电子邮件作为我的输入。
最后看起来像这样
{{#autoForm collection="Meteor.users" id="insertUserForm" type="method" meteormethod="insertUser" schema="Schema.NewUser" }}
{{> afQuickField name='profile.organization'}}
<div class="form-group{{#if afFieldIsInvalid name='emails'}} has-error{{/if}}">
<label>Email</label>
{{> afFieldInput name='emails.0.address'}}
{{#if afFieldIsInvalid name='emails'}}
<span class="help-block">{{afFieldMessage name='emails'}}</span>
{{/if}}
</div>
<label>Roles</label>
{{> afFieldInput name="roles.0" options=roleOptions}}
<button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}
在我的模式中,我对电子邮件做了一些小改动。电子邮件类型现在是 [对象]。
emails: {
type: [Object],
label: "Email",
optional: false
},
"emails.$.address": {
type: String,
regEx: SimpleSchema.RegEx.Email,
label: 'Email'
}
我刚开始使用 Meteor 和 autoform。我创建了一个快速表单调用的架构。问题是我无法弄清楚如何在没有数组组包装器的情况下对特定数组索引进行验证。如果我在下面使用这种类型的模式,我可以得到验证,但它需要一个对象,我正在寻找一个字符串。如果我将类型更改为 String,则根本不会显示验证。任何帮助是极大的赞赏。
schema.js
Schema.NewUser = new SimpleSchema({
"profile.organization" : {
type: String,
regEx: /^[a-z0-9A-z .]{3,30}$/,
optional: true,
label: "Company"
},
emails: {
type: Object,
label: "Email",
},
"emails.$":{
type: Object,
},
"emails.$.address": {
type: String,
label: "Email",
regEx: SimpleSchema.RegEx.Email,
},
parent: {
type: String,
optional: true,
},
roles: {
type: Array,
optional: true
},
'roles.$': {
type: String,
allowedValues: [
'owner',
'admin'
],
optional: true,
label: "Choose a number",
autoform: {
options: [
{
label: "owner",
value: "owner"
},
{
label: "admin",
value: "admin"
}
]
}
}
});
html
{{> quickForm collection="Meteor.users" id="insertUserForm" type="method" meteormethod="insertUser" schema="Schema.NewUser" fields="profile.organization, emails.0.address, roles.0" }}
我最终通过使用 afFieldInput 从 quickField 切换到 autoform 来解决这个问题。这可以选择使用 afFieldIsInvalid 检查字段是否有效。我用它来检查父电子邮件字段以进行验证,但仍然使用索引特定电子邮件作为我的输入。
最后看起来像这样
{{#autoForm collection="Meteor.users" id="insertUserForm" type="method" meteormethod="insertUser" schema="Schema.NewUser" }}
{{> afQuickField name='profile.organization'}}
<div class="form-group{{#if afFieldIsInvalid name='emails'}} has-error{{/if}}">
<label>Email</label>
{{> afFieldInput name='emails.0.address'}}
{{#if afFieldIsInvalid name='emails'}}
<span class="help-block">{{afFieldMessage name='emails'}}</span>
{{/if}}
</div>
<label>Roles</label>
{{> afFieldInput name="roles.0" options=roleOptions}}
<button type="submit" class="btn btn-primary">Insert</button>
{{/autoForm}}
在我的模式中,我对电子邮件做了一些小改动。电子邮件类型现在是 [对象]。
emails: {
type: [Object],
label: "Email",
optional: false
},
"emails.$.address": {
type: String,
regEx: SimpleSchema.RegEx.Email,
label: 'Email'
}