2016-11-23 17 views
0

私はember-cli:2.5.0とember-validations:v2.0.0-alpha5を使用しています。 私のemberコンポーネントでは、それぞれの属性が変更されますが、専門用語呼び出しの検証でlazilyメソッドを呼び出す場合にのみ、この検証を実行します。Ember-validationレイジー検証の実装方法

見つけてください以下のコードサンプルは、

import Ember from 'ember'; 
import EmberValidations, { validator } from 'ember-validations'; 

export default Ember.Component.extend(EmberValidations, { 

didReceiveAttrs() { 
    this.set('newBook', this._bookModel().create()); 
}, 

_bookModel(data = {}) { 
return Ember.Object.extend(EmberValidations, { 
    bookVersion: null, 
    isEditable: false, 
    validationActive: false, 
    validations: { 
    bookVersion: { 
     inline: validator(function() { 
if(this.validationActive){ //Here this.validationActive always return undefined 
     var version = this.model.get('bookVersion') || "", 
      message = []; 

     if (Ember.isEmpty(bookVersion)) { 
      message.push("Book Version is mandatory!!!"); 
     } 

     if (message.length > 0) { 
      return message.join(','); 
     } 
     } 
     }) 
    } 
    } 
}, data); 
} 

}); 

actions: { 
     this.get('newBook').set("validationActive",true); 
     this.get('newBook').validate().then(() => { 
      //Do the action 
     } 
} 

は、私は上記の検証が呼び出すだけで実行したい "this.get( 'newBookを')。検証します()"。私は完全に新しくemberになっていますので、他の人の投票を下す前にあなたのコメントを記入してください。他のコードサンプルについて親切に教えてください。

あなたの助けが必要です。

答えて

1

検証のために使用しているアドオン( "ember-validations")は非常に普及しており、そのドキュメントは他のものと比較してかなり良好です。ドキュメントを見ると、documentationに「条件付きバリデータ」という名前のパーツがあります。 booleanプロパティを使用して、検証をいつ実行するかを制御できます。

次のような意味の図が表示されますtwiddle。私は、アプリケーションコントローラ内でユーザーの名前の単純な検証を作成しました。名前フィールドの長さは5以上でなければならず、条件validationActiveがtrueの場合にのみ検証が実行されます。最初は、条件は偽です。これはバリデーターが機能せず、コントローラのisValidプロパティ(EmberValidations Mixinから継承されています)が真であることを意味します。表示されたボタンでプロパティを切り替えると、検証が実行されます(条件がtrueに設定されているため、検証がトリガーされるため)isValidはfalseに戻ります。値を変更した場合。検証結果はユーザの名前の価値に関して適切に変化する。条件をもう一度トグルしてfalseに設定すると、 isValidは、ユーザー名の価値が何であれtrueになります。

これにより、検証がいつ機能するかを制御する方法についての洞察が得られたら幸いです。

編集後に行うべきことは次のとおりです。インラインバリデータ内のコンポーネントのvalidationActiveフィールドに到達しようとしているため、フィールドが未定義です。 validationActivethis.model.get('validationActive')とし、試してみてください。それは動作するはずです。

+0

私はインラインバリデータを使用しているので、あなたの答えを私の質問と関連付けることはできません。間違った理解のために申し訳ありません。条件付きインラインバリデータのドキュメントは見つかりませんでした。私はあなたの答えに基づいて私の質問を更新しましたが、私はいつも "条件を"未定義になっています。私を修正し、このシナリオから私を助けてください。 – VelNaga

+0

あなたの編集に関して私が更新した部分を見てください。 – alptugd

+0

@alptugxそれはあなたの助けのために多くのおかげでチャームのように働いています。私はもう1つのクエリを持っていますが、それらの検証エラーをクリアする方法を知っていますか? – VelNaga

関連する問題