javascript - 跨多页面表单使用 ember-cp-validations

标签 javascript validation ember.js

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

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
})

我希望它仅在我使用 checkout.info 时验证nameemail 并当我使用 checkout.shipping 时,验证 address1address2city

我已经尝试过的事情之一是在我的 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验证器,当它不在当前路由上时,它会禁用presence。这样做的问题是其他验证器仍然会阻止它(例如类型或长度)。

我该如何实现这一目标?

最佳答案

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

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,
});

关于javascript - 跨多页面表单使用 ember-cp-validations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45343328/

相关文章:

authentication - OAuth2 资源所有者密码凭证流程

javascript - 如何更改 tr 的背景颜色

jquery - ASP.NET-MVC jQuery 不显眼的远程验证返回误报

javascript - 错误 : [ng:areq] Argument 'employerCtrl' is not a function, 未定义

javascript - 如何验证 ng-form 是否被触摸

javascript - 使用 javascript 验证各个表单输入

javascript - 如何将 `action` 添加到 EmberJs 中的组件元素?

html - 使用完全分离的前端和用户身份验证

javascript - 如何创建由 ChakraCore 托管的 javascript 独立可执行文件?

javascript - JavaScript 中 "new Array(..)"和 "[..]"的区别?