在我的成员组件中,我使用的是ember-validations:v2.0.0-alpha.5和成员,对于属性中的每一个更改,我都有一个自动运行的验证,但是我只想在技术术语调用验证中调用“()”方法时才运行这个验证。
请找到下面的代码样本,
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()“。我是全新的成员,所以向下选民,请把您的意见,然后下来投票给其他人,请让我知道任何更多的代码样本。
你的帮助应该是值得赞赏的。
发布于 2016-11-23 21:55:11
您所使用的用于验证(“成员-验证”)的注释是非常流行的,与其他文档相比,它的文档非常好。如果您查看文档,文档中有一个名为“条件验证器”的部分。您可以使用布尔属性来控制要执行验证的时间。
您可以在下面的转盘中看到我的意思的说明。我在应用程序控制器中为用户名创建了一个简单的验证。name字段的长度必须至少为5,只有在条件validationActive为真时才能执行验证。最初,条件为false;这意味着验证器没有工作,并且Controller的isValid属性(它是从EmberValidations Mixin继承的)为真。如果使用提供的按钮切换属性;验证将运行(因为条件现在设置为true;因此验证被触发),isValid将返回为false。如果您更改了该值,验证结果将相对于用户名的值进行适当的更改。如果您再次切换该条件,将其设置为false;那么无论用户名的valie是什么,isValid都将变为true。
我希望这能让您了解如何控制您的验证何时起作用。
以下是编辑之后应该做的事情:字段是未定义的,因为您试图在内联验证器中访问组件自己的validationActive字段。请按以下方式获得validationActive,this.model.get('validationActive')并试一试。应该管用的。
https://stackoverflow.com/questions/40769051
复制相似问题