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>

Live in Twiddle

验证必须在数据对象上定义,在您的情况下,它不是路由的属性,而是底层控制器的模型。 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.

中找到的内容