cp-validation 未按预期工作
cp-validation not working as expected
我正在将 cp-validaiton
与我的 ember 应用集成。但我没有得到任何回应。任何人在这里帮助我。
我的路线 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>
验证必须在数据对象上定义,在您的情况下,它不是路由的属性,而是底层控制器的模型。 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.
中找到的内容
我正在将 cp-validaiton
与我的 ember 应用集成。但我没有得到任何回应。任何人在这里帮助我。
我的路线 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>
验证必须在数据对象上定义,在您的情况下,它不是路由的属性,而是底层控制器的模型。 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.
中找到的内容