我正在将cp-validaiton
与我的余烬应用集成。但我没有得到任何回应。任何人都帮助我。
我的路线js:
import Ember from 'ember';
import Validations from '../validation'
export default Ember.Route.extend(Validations, {
num:null,
message: '',
model(){
return { num:null}
},
actions:{
check(){
this.set('message','');
this.validate().then(({model, validations})=>{
if(validations.get('isValid')){
console.log('statge', validations.get('isValid') )
this.set('message','');
}else{
if(model.get('validations.attrs.num.isInvalid')){
this.set('message',model.get('validations.attrs.num.messages'));
}
}
})
}
}
});
我的validation.js:
import { validator, buildValidations } from 'ember-cp-validations';
export default buildValidations({
num: [
validator('number',{
allowString: true,
integer: true,
message: 'Error! This is not an integer!'
}),
validator('presence', true)
]
});
模板:
<h1>This is my Route</h1>
Enter Age:<br>
{{input value=model.num}}<br>
<div style='color: red'>{{message}}<br></div>
<button {{action 'check'}}>Check</button><br>
答案 0 :(得分:2)
必须在数据对象上定义验证,在您的情况下,数据对象不是Route的属性,而是基础Controller的模型。控制器的模型由Ember本身设置在路线的setupControler()
钩子中。
因此,我们使用嵌套密钥方法来设置在正确数据上设置的验证:
import { validator, buildValidations } from 'ember-cp-validations';
export default buildValidations({
'controller.model.num': [
validator('number',{
allowString: true,
integer: true,
//message: 'Error! This is not an integer!'
}),
validator('presence', true)
]
});
注意:属性定义
export default Ember.Route.extend(Validations, {
num:null, // this is not used, just confusing :)
message: '',
....
}
由于没有使用,是不必要和令人困惑的,随意将其删除。
在属性基础上检查有效性/错误等可以如下实现:
model.get('validations.attrs.controller.model.num.isValid');
model.get('validations.attrs.controller.model.num.errors');
model.get('validations.attrs.controller.model.num.messages');
你的路线看起来像这样:
import Ember from 'ember';
import Validations from '../validation'
export default Ember.Route.extend(Validations, {
model(){
return { num:null}
},
actions:{
check(){
this.set('controller.message','');
this.validate().then(({model, validations})=>{
if(validations.get('isValid')){
this.set('controller.message','');
}else{
if(model.get('validations.attrs.controller.model.num.isInvalid'){
this.set(
'controller.message',
model.get('validations.attrs.controller.model.num.messages.firstObject'));
}
}
})
}
}
});
但是,我强烈建议您将与验证相关的代码迁移到模型,而不是在Route中构建它们。它更符合逻辑,更易读,可以减少代码的大小,并且符合您在ember-cp-validations docs中找到的内容。