电子邮件上的Meteor Collection2验证显示为对象,但不显示为字符串

时间:2015-09-04 19:45:21

标签: meteor meteor-autoform meteor-collection2

我刚刚开始使用Meteor和autoform。我创建了一个quickform调用的Schema。问题是我无法弄清楚如何在没有数组组包装的情况下对特定数组索引进行验证。如果我在下面使用这种类型的模式,我可以得到验证,但它需要一个对象,我正在寻找一个字符串。如果我将类型更改为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" }}

1 个答案:

答案 0 :(得分:1)

我最终通过使用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'
  }