在多页表单中使用ember-cp-validations

时间:2017-07-27 06:51:42

标签: javascript validation ember.js

我有一个order模型,我正在为多页表单收集数据。我已经创建了一些这样的验证:

const Validations = buildValidations({
  // these should only be used when we’re on checkout.info route
  name: validator('presence', true),
  email: [
    validator('presence', true),
    validator('format', { type: 'email' })
  ],
  // these should only be used when we’re on checkout.shipping route
  address1: validator('presence', true),
  address2: validator('presence', true),
  city: validator('presence', true),
});

我的模型设置为像这样使用它们:

export default Model.extend(Validations, {
  // model set-up in here
})

我想要发生的事情是,当我在name时验证emailcheckout.info并验证address1,{{1}当我在address2时,我和city

我已经尝试过的一件事就是在我的checkout.shipping组件中运行验证:

checkout-form

问题是,这似乎没有解除我的表单下一个按钮

上的禁用状态
let { m, validations } = order.validateSync({
  on: ['name', 'email']
})
const isValid = validations.get('isValid')
order.set('didValidate', isValid)

我尝试的另一件事是构建一个自定义{{next-button disabled=(v-get model.order 'isInvalid')}} 验证程序,当它不在当前路由时禁用routed-presence。这样做的问题是其他验证器仍会阻止这种情况(例如类型或长度)。

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:1)

虽然没有详细记录,但您可以根据模型计算的条件启用或禁用验证:

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

export default Ember.Object.extend(buildValidations({

  email: {
    disabled: Ember.computed.alias('model.isCheckoutPage'),
    validators: [
      ...
    ],
  }
}), {
  // could be a computed property too
  isCheckoutPage: false,
});