2017-08-21 80 views
1

我正在將cp-validaiton與我的餘燼應用程序集成。但我沒有得到任何迴應。任何人都可以幫助我。cp驗證未按預期工作

我的路線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

回答

2

驗證必須在數據被定義對象,在你的情況下,它不是Route的屬性,而是底層Controller的模型。控制器的模型由Ember自己設置在路線的setupControler()鉤子中。

因此,我們使用嵌套鑰匙接近目標時正確的數據集驗證:

​​

注:該屬性定義

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中構建它們。它更符合邏輯,可讀性強,可以減少代碼的大小,並符合您在燼文驗證docs中找到的內容。

+0

讓我試着更新並檢查 – 3gwebtrain

+0

就像你的建議,我糾正了旋轉。但我沒有得到確認的數量。你能不能在這裏更新'twiddle':https://ember-twiddle.com/6ffa733456cbe4affe5d052c04bf5ab8?openFiles=validation.js%2C&route=%2Fmy-route – 3gwebtrain

+0

我已經更新了我的答案 – Pavol