2017-11-25 9 views
0

モデルとフォームでember-cp-validationを使用しています。特定の条件が満たされた場合にのみ検証を有効にしたい。ルートがアクティブな場合、またはコンポーネントが特定のコンテキストで使用される場合などember-cp-validations条件付きバリデータ

説明するために、私はモデル自体に典型的なバリデーションを持つ基本的なemailモデルを持っています。そのモデルがユーザーアカウントのコンテキストで使用されている場合、追加のバリデーターを有効にしたい(username-existsバリデーター、電子メールアドレスを別のアカウントにあるものに更新しようとしているかどうかを確認するために使用する)。

マイメールモデル:

import DS from 'ember-data'; 
import { validator, buildValidations } from 'ember-cp-validations'; 

const { attr } = DS; 

const Validations = buildValidations({ 
    email: { 
     validators: [ 
      validator('presence', { presence: true, description: 'E-Mail'}), 
      validator('format', { 
       type: 'email' 
      }), 
      validator('length', { 
       max: 200, 
      }) 
     ] 
    }, 
}); 

export default DS.Model.extend(Validations, { 
    email: attr('string'), 
    optin: attr('boolean', { defaultValue: false }) 
}); 

私はすでにユーザ名が存在するカスタムバリデータを持っています。私はちょうど条件付きでその検証を追加する方法を見つけることができません

最も簡単な解決策は、条件が満たされない限り無効にするdisabledオプションで検証済みを追加することです。

validator('username-available', { 
    debounce: 300, 
    disabled: computed.bool(what is the dependent key??) 
}) 

しかし、私は従属するキーが何であるか分かりません。私はルート名がモデル定義で利用可能ではないと思います。

また、コンポーネント自体に条件付きバリデータを追加する必要がありますか?コンポーネントjsからvalidators配列にバリデータを追加する方法はありますか?

私はおそらく何かを明らかに不足していると思う;)

+0

うーん、ちょうど私が推測するログイン時に、必要なだけ、あなたのモデルを検証します。 – Cezary

答えて

1

それは私がそれを探していたとき、あまりにもそれを掘るために私にしばらく時間がかかりました。ここでは、私が持っているものです(若干異なるセットアップをしていますが、軌道に乗る必要があります):

email: { 
    disabled: Ember.computed.not('model.attributeInQuestion'), 
    validators: [ 
    ], 
    }