Ember验证如何实现延迟验证

时间:2016-11-23 16:01:30

标签: validation ember.js ember-data ember-cli

我正在使用 ember-cli:2.5.0和ember-validations:v2.0.0-alpha.5 在我的ember-component中,我有一个验证,它会自动为属性中的每个更改运行,但我只想在懒惰的技术术语调用验证中调用“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()”。我是一个全新的贪婪,所以下来选民请在下面投票之前提出你的意见,其他人请让我知道更多的代码样本。

你的帮助应该是值得的。

1 个答案:

答案 0 :(得分:1)

您用于验证的插件(" ember-validations")非常受欢迎,与其他人相比,它的文档相当不错。如果您查看文档,则会有一个名为"条件验证器"在documentation。您可以使用布尔属性来控制何时执行验证。

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

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

以下是修改后应该执行的操作:该字段未定义,因为您尝试在内联验证程序中访问组件自己的validationActive字段。请按以下方式validationActive获取this.model.get('validationActive')并尝试一下。它应该工作。