2017-01-12 1 views
0

フォーム内の多数のプロパティに対して単一のaurelia検証を一致させようとしています。例えば。テーブル内の行にマップされるオブジェクトの配列内のプロパティ名がssidのすべてのフィールド。妥当性確認文書では、保証条項にはproperty expressionが必要です。私はapPwdは、プロパティ式でaurelia検証プロパティ式のヘルプが必要です

ValidationRules.ensure('apPwd').displayName('XY AP Password').maxLength(32).minLength(8).on(this);

を使用して単一のプロパティのために働いて検証を持って

{ValidationRules, ValidationController} from 'aurelia-validation';

から検証を使用しています。

しかし、私はプロパティ式の仕様を見つけることができません。 aureliaドキュメントのほとんどの例は、単一のプロパティ名を示しています。私が見た中で最も複雑なものは、|または&(それが何であれ)と一緒にパイプされたものです。

誰かが私の特定の問題について仕様またはヘルプを教えてもらえますか?あるいは、私はこのパッケージを捨てて自分のコードを書き出すべきでしょうか?

答えて

0

私は、これはあなたを助けることができると思います。

これはvalidate.ts

import { autoinject } from 'aurelia-framework'; 
import { ValidationRules, ValidationController } from 'aurelia-validation'; 

@autoinject 
export class Validate { 
    numberField: number; 

    controller: any; 

    constructor (
     private validationController: ValidationController 
    ) { 
     this.controller = validationController; 

     ValidationRules.customRule(
      'nummer', 
       (value, obj, min, max) => { 
        let numberValue: number = parseInt(value); 
        return value === null || value === undefined || Number.isInteger(nummer) && nummer >= min && nummer <= max; 
       }, 
       `\${$displayName} must be an integer between \${$config.min} and \${$config.max}.`, 
       (min, max) => ({ min, max }) 
      ); 

     ValidationRules 
      .ensure((m: this) => m.numberField) 
       .required() 
       .withMessage('Rutan får inte vara tom.') 
       .satisfiesRule('nummer', 1, 100) 
       /*.satisfies((value: any, object?: any) => { 
        console.log(value); 
        if (value >= 1 && value <= 100) { 
         return true; 
        } 
        else { 
         return false; 
        } 
       }) 
       .withMessage(`The number must be between - 100.`)*/ 
      .ensure((m: this) => m.numberField).required() 
      .on(this); 
    } 

    submit(): void { 
     this.executeValidation(); 
    } 

    executeValidation(): void { 
     this.controller.validate() 
     .then(errors => { 
      if (errors.length === 0) { 
       console.log('all good!'); 
      } else { 
       console.log('all errors!'); 
      } 
     }); 
    } 

} 

そしてこれが(私の場合には、しかし、あなたが好きな場合は、HTMLページを使用することができます)validate.pugされています私はあなたの質問を理解したが、

template 
    section.au-animate 
     h2 Validate 

     form(role="form") 
      .form-group 
       label Number 
       input#meetingSubject.form-control(type="text" value.bind="numberField & validate") 

      button.btn.btn-lg.btn-primary(click.delegate='submit()') Validate 
     div 
      h3 ${'latestValidationResult'} 
      ul(if.bind='controller.errors.length') 
       li(repeat.for='error of controller.errors') ${error.message} 
+0

私は驚いたことに、あなたが '.ensure(m => m.numberField)'を除いて表示したものすべてを理解していると思います。この関数は、aureliaドキュメントが「プロパティ式」と呼ぶものですか?その機能の意味はわかりません。いつ呼び出され、なぜですか?そしてそれのためのドキュメントへのポインタは素晴らしいでしょう。 –

0

わからない場合、私はあなたがensureObjectを探していると思う:

ValidationRules 
    .ensureObject() 
    .satisfies(obj => { 
     return obj.property1 === 'test' && obj.property2.indexOf('test2') !== -1 
    }) 
    .withMessage('Some error message.') 
    .on(this); 
+0

私はaurelia文書の 'ensureObject'で検索しましたが、何も見つかりませんでした。あなたはそれについてどこで知ることができますか?たぶんあなたはobjが何を指しているのかを説明するだけかもしれません。 this.rows = [{prop:1}、{prop:2}]の各 'prop'プロパティのように' obj'を配列の各オブジェクトに対してテストするにはどうしたらいいですか? –

+0

ドキュメントはhttp://aurelia.io/hub.html#/doc/article/aurelia/validation/latest/validation-basics/8にあります。配列の各プロパティを検証する場合は、配列全体を反復処理し、値が条件を満たさない場合はfalseを返します –

+0

'ensureObject'はそのドキュメントリンクの検索結果にもありません。また、このコードは、 'ValidationRules.ensureObject()。satisfies(obj => console.log(obj))。on(this);'の形式をどれだけ変更しても出力を生成しません。私はちょうどそれをハッキングし続けるだろうと思う。 –

関連する問題