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
并试一试。它应该有效。
我正在使用 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
并试一试。它应该有效。