2012-10-23 19 views
29

knockout.validationプラグインを使用しようとしています。私はexampleViewModelを作成しました:ko.validation.groupの使用方法

function exampleViewModel() { 
    this.P1 = ko.observable().extend({ required : true }); 
    this.P2 = ko.observable().extend({ required : true }); 
    this.P3 = ko.observable().extend({ required : true }); 
    this.P4 = ko.observable().extend({ required : true }); 

    this.errors = ko.validation.group(this); 
}  

上記のビューモデルでは、私は現在のオブジェクトのエラーという名前の検証グループを作成しました。このエラープロパティよりも4のうち1つのプロパティで検証ルールが失敗した場合は、エラーメッセージが表示されます。

My question is私はこれを行うにはどうすればよいの3つだけのプロパティ(P1, P2, P3)のうちの検証グループを作成したいのですか?

答えて

53

これは私にとってはうまくいきました。 thisをグループ化するのではなく、検証するプロパティを保持するプロキシオブジェクトを作成します。あなたがこれを行う場合は

this.errors = ko.validation.group({ 
    P1: this.P1, 
    P2: this.P2, 
    P3: this.P3 
}); 

validatedObservable代わりgroupの使用を検討してください。エラーを受け取るだけでなく、isValidプロパティを使用してすべてのプロパティが有効かどうかをまとめて確認することができます。

this.validationModel = ko.validatedObservable({ 
    P1: this.P1, 
    P2: this.P2, 
    P3: this.P3 
}); 

// is the validationModel valid? 
this.validationModel.isValid(); 
// what are the error messages? 
this.validationModel.errors(); 
+0

。私はゲッター/セッターを検出し、それに応じて反応するはずだと信じていましたが、これは少なくともバリデーション作業を証明しました。 – MrYellow

11

documentationで説明したように、特定の観測を検証するための正しい方法は次のとおりです。デュランダル観察可能なプラグインの検証の問題をデバッグするために、このアプローチを使用し

this.errors = ko.validation.group([this.P1, this.P2, this.P3]); 
+6

ドキュメントから: > "最初のパラメータは配列である必要はないことにも注意してください。オブジェクトが1つしかない場合は、オブジェクトを配列にラップすることなくそのまま渡すことができます。 –

+0

マニュアルリンクのためのtks! – Alex