我正在使用 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()”。我是一个全新的贪婪,所以下来选民请在下面投票之前提出你的意见,其他人请让我知道更多的代码样本。
你的帮助应该是值得的。
答案 0 :(得分:1)
您用于验证的插件(" ember-validations")非常受欢迎,与其他人相比,它的文档相当不错。如果您查看文档,则会有一个名为"条件验证器"在documentation。您可以使用布尔属性来控制何时执行验证。
您可以在以下twiddle中看到我的意思。我在应用程序控制器中为用户的名称创建了一个简单的验证。名称字段的长度必须至少为5,并且仅在条件validationActive
为真时才执行验证。原来;条件是假的;这意味着验证器不起作用,并且Controller的isValid
属性(继承自EmberValidations
Mixin)是真的。如果您使用提供的按钮切换属性;验证将运行(因为条件现在设置为true;因此验证被触发)并且isValid
将返回false。如果你改变了价值;验证结果将根据用户名称的值进行适当更改。如果再次切换条件将其设置为false;无论用户姓名的价值如何,isValid
都将成为现实。
我希望这能让您深入了解如何控制验证何时起作用。
以下是修改后应该执行的操作:该字段未定义,因为您尝试在内联验证程序中访问组件自己的validationActive
字段。请按以下方式validationActive
获取this.model.get('validationActive')
并尝试一下。它应该工作。