Ember-validation 如何实现惰性验证

Ember-validation how to implement lazy validation

我正在使用 ember-cli:2.5.0 和 ember-validations:v2.0.0-alpha.5 在我的 ember-component 中,我有一个验证,它是 运行ning 自动为属性中的每个更改,但我想 运行 只有当我调用 "validate()" 方法时才进行此验证技术术语延迟调用验证。

请查找以下代码示例,

import Ember from 'ember';
import EmberValidations, { validator } from 'ember-validations';

export default Ember.Component.extend(EmberValidations, {

didReceiveAttrs() {
    this.set('newBook', this._bookModel().create());
},

_bookModel(data = {}) {
return Ember.Object.extend(EmberValidations, {
  bookVersion: null,
  isEditable: false,
  validationActive: false,
  validations: {
    bookVersion: {
      inline: validator(function() {
if(this.validationActive){ //Here this.validationActive always return undefined
        var version = this.model.get('bookVersion') || "",
          message = [];

         if (Ember.isEmpty(bookVersion)) {
           message.push("Book Version is mandatory!!!");
         }

        if (message.length > 0) {
          return message.join(',');
        }
        }
      })
    }
  }
}, data);
}

});

actions: {
        this.get('newBook').set("validationActive",true);
        this.get('newBook').validate().then(() => {
             //Do the action
        }
}

我希望上述验证 运行 仅调用 "this.get('newBook').validate()"。我是 ember 的新手,所以投票者请在投票给其他人之前发表您的评论,请让我知道更多代码示例。

你的帮助应该是可观的。

您用于验证的插件 ("ember-validations") 是一个非常受欢迎的插件,与其他插件相比,它的文档非常好。如果您查看文档,在 documentation 中有一个名为 "Conditional Validators" 的部分。您可以使用布尔值 属性 来控制何时执行验证。

你可以在下面看到我的意思的例证twiddle。我在应用程序控制器中为用户名创建了一个简单的验证。名称字段的长度必须至少为 5,并且仅当条件 validationActive 为真时才执行验证。最初;条件为假;这意味着验证器没有工作,控制器的 isValid 属性(继承自 EmberValidations Mixin)为真。如果您使用提供的按钮切换 属性;验证将 运行 (因为条件现在设置为真;因此触发验证)并且 isValid 将 return 为假。如果您更改值;验证结果将根据用户名的值进行适当更改。如果再次切换条件将其设置为 false;然后 isValid 无论用户名的值是什么都将变为真。

我希望这能让您深入了解如何控制验证何时起作用。

以下是您在编辑后应该做的事情:该字段未定义,因为您试图在内联验证器中访问组件自己的 validationActive 字段。请按照this.model.get('validationActive')获取validationActive并试一试。它应该有效。