2016-05-13 16 views
0

プロパティに値がない場合、検証は呼び出されないようです。
これは私が試してみて、それを動作させるために使用しているコードです:null/empty/length == 0が起動しない場合の検証.pass

.ensure('baseContent.SetNamePrint').passes((name) => 
{ 
    var webNameLength = this.baseContent.SetNameWeb.length; 
    var printNameLength = name.length; 

    console.log(webNameLength); 
    console.log(printNameLength); 

    if ((webNameLength > 1 && webNameLength < 51) || (printNameLength > 1 && printNameLength < 51)) { 
     return true; 
    } 
    return false; 
}).withMessage('Web Name or Print Name is Required') 

ザ・はとき、それは空の長さのものにプロパティの値が変更され、(空白文字列)が何だけ火を渡します起こる

私が必要とするのは、変更があったときだけでなく、値がある場合にだけ、値が変更されるたびに.passes()が呼び出されるためです。

答えて

0

私が望むものを得るには、以下のコードで終わりました。

this.validator = this.validation.on(this) 
    .ensure('SetNameWeb', (config) => {config.computedFrom(['SetNamePrint', 'SetNameWeb'])}) 
     .if(() => { return this.HasImageEitherPrintNameOrWebName === false }) 
      .isNotEmpty().withMessage('or "Print Name" is required') 
      .hasLengthBetween(0, 50) 
     .endIf() 
    .ensure('SetNamePrint', (config) => {config.computedFrom(['SetNameWeb', 'SetNamePrint'])}) 
     .if(() => { return this.HasImageEitherPrintNameOrWebName === false }) 
      .isNotEmpty().withMessage('or "Web Name" is required') 
      .hasLengthBetween(0, 50) 
     .endIf() 

これは、両方のフィールドが互いに更新されるのに必要な機能を私に与えました。

しかし、これを動作させるために修正が必要だったcomputureFromを扱う方法で、aureliaコードにバグがありました。

この問題は[email protected]で発生しましたが、今回は完全に異なる方法で動作する新しいバージョンが存在するため、この問題が発生している場合は更新することをおすすめします。

0

さらにターゲットのプロパティをisNotEmptyに制限する必要があります。ドキュメントから

.ensure('baseContent.SetNamePrint').isNotEmpty().passes(... 

isNotEmptyルールは常に他の 検証ルールの前に最初にチェックされます。つまり、isNotEmptyルールがないと、 .hasMinLength(5)ルールは、フィールドが空であることが許可されているため、値 ''を有効な と見なします。

PS:私は、アウレリアの検証が書き直されていると聞きました。おそらくそれが私がもはやマスターブランチからのドキュメンテーションを他のブランチに見つけることができない理由です。here

+1

このコードはミラーリングされていますが、別のプロパティで少し変更されていますので、基本的には2つのプロパティのいずれかが必要です。これは空であれば有効です。 –

+0

@AndyGouldそれでは、複数のプロパティを含む検証が必要です。 'onValidate()'を使って、 "サブジェクト全体の検証時に呼び出されるコールバックを登録する"ことを考えてください。注意しなければならないのは、プロパティ値が変更されたときにコールバックが自動的に起動されないということです。あなたのケースでは、私は可能な限り各プロパティ(例えば、長さb/w 1と51)を制約し、フォーム提出時に "XまたはYが必要です"のように 'onValidate'を使います。 – qtuan

+0

もう一つの特別なオプションは、 'webOrPrintName'のような計算されたものを持って、その代わりに検証を適用することです。 – qtuan

関連する問題