Ember-validation 如何实现延迟验证



我正在使用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()"。我对余烬是完全陌生的,所以投票者请在为其他人投反对票之前发表您的评论,请让我知道更多代码示例。

您的帮助应该是可观的。

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

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

我希望这能让您了解如何控制验证何时应该工作。

以下是编辑后应执行的操作: 该字段未定义,因为您正在尝试在内联验证器中访问组件自己的validationActive字段。请按以下方式this.model.get('validationActive')validationActive并尝试一下。它应该有效。

最新更新