1

我正在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'));
                    }
        }
      })
    }
  }
});

我的验证.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>

生活在玩弄

4

1 回答 1

2

验证必须在数据对象上定义,在您的情况下,它不是路由的属性,而是底层控制器的模型。Controller 的模型由 Ember 自己在setupControler()Route 的 hook 中设置。

因此,我们使用嵌套键方法来针对正确数据设置的目标验证:

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文档中找到的内容。

于 2017-08-21T07:45:28.433 回答