1

我在模型和表单上使用 ember-cp-validations。我希望仅在满足某些条件时才激活验证。例如,当路由处于活动状态或在特定上下文中使用组件时。

为了说明,我有一个基本email模型,它对模型本身进行了典型的验证。当在用户帐户的上下文中使用该模型时,我希望有一个额外的验证器处于活动状态(一个username-exists验证器,用于判断他们是否正在尝试将他们的电子邮件地址更新为另一个帐户上存在的电子邮件地址)。

我的电子邮件模型:

import DS from 'ember-data';
import { validator, buildValidations } from 'ember-cp-validations';

const { attr } = DS;

const Validations = buildValidations({
    email: {
        validators: [
            validator('presence', { presence: true, description: 'E-Mail'}),
            validator('format', {
                type: 'email'
            }),
            validator('length', {
                max: 200,
            })
        ]
    },
});

export default DS.Model.extend(Validations, {
    email: attr('string'),
    optin: attr('boolean', { defaultValue: false })
});

我已经有一个用户名存在的自定义验证器。我只是不知道如何有条件地添加该验证。

最简单的解决方案是添加已验证的disabled选项,除非满足条件,否则该选项将保持禁用状态。

validator('username-available', {
    debounce: 300,
    disabled: computed.bool(what is the dependent key??)
})   

但我不知道依赖键是什么。我认为模型定义中没有可用的路由名称。

还是应该将条件验证器添加到组件本身?有没有办法将验证器从组件 js 附加到validators数组?

我想我可能遗漏了一些明显的东西;)

4

1 回答 1

3

当我在寻找它时,我也花了一些时间来挖掘它。这是我所拥有的(设置略有不同,但应该让你继续):

  email: {
    disabled: Ember.computed.not('model.attributeInQuestion'),
    validators: [
    ],
  }
于 2017-12-05T04:09:37.367 回答