2016-01-13 19 views
0

我想驗證單個組件中的字段,使用燼驗證,但給出了將驗證對象傳遞給組件的可能性,而不是將其內部硬編碼。此代碼:組件驗證Ember-Validations

EditDefaultPropertyComponent = Ember.Component.extend EmberValidations.Mixin, 

validations: 
    value: 
    numericality: true 

onValueObserver: Ember.observer('value', -> 
    @validate() 
    .then(() => 
     ... 
     console.log 'good' 
     @set 'error', null 
    ) 
    .catch((err) => 
     ... 
     console.log 'bad' 
     @set 'error', err 
    ) 
) 

setupFlags: (-> 
    ... 
).on('init') 

會工作得很好,但如果我想設置在組件的初始化時間驗證作爲參數的組件通過一些任意驗證對象,比方說在setupFlags

setupFlags: (-> 
    @setProperties(
     ... 
     @set 'validations', Ember.copy ({ value: { numericality: true }})) 
).on('init') 

不起作用。無論輸入如何,它總是會打印「好」。如果我訪問

console.log (@get 'validations') 

內部然後()的@Validate方法的分支它顯示然而的對象。 我在這裏錯過了一些控制流程嗎?

回答

0

好吧,我已經知道答案,但我不知道如何克服它。在有人發現它的情況下,我會把它放在這裏。

EmberValidations.Mixin添加到組件結合有INIT方法,將檢查是否有任何驗證對象中所定義,並且將觀察者的它的屬性添加到每一個。 該代碼在組件的初始化函數之前運行,因此,當在組件中修改驗證對象時,觀察者已經設置了之前遇到的值。

0

好的,解決了。

您可以定義將覆蓋它自己的init方法,運行一些代碼,然後調用超()構造函數中混入的初始化方法。

init: -> 
    ... 
    @_super()