2017-08-05 9 views
1

aurelia-dialogとaurelia-validationを併用しようとしています。私が最初にポップアップを開いたときに、私は検証をトリガする、私は正しいエラーを取得します。私はそのイベントの後、ポップアップを再開するたびに、私はなど、同じ検証は、二回を3回繰り返し取得Aureliaダイアログの反復確認

これは私がdialogService

からのポップアップを呼び出し、ポップアップ

import { inject } from 'aurelia-framework'; 
import { DialogController } from 'aurelia-dialog'; 
import { ValidationController, ValidationRules } from 'aurelia-validation'; 
import { MaterializeFormValidationRenderer } from './../resources/elements/materialize-form-validation-renderer'; 

@inject(DialogController, ValidationController) 
export class AddProject { 

    rules = ValidationRules 
     .ensure('name') 
     .required() 
     .withMessage('Please enter a name for your project.') 
     .rules; 

    constructor(dialogController, validationController) { 
     this.name = ''; 
     this.project = null; 
     this.dialogController = dialogController; 
     this.validationController = validationController; 
     this.validationController.addRenderer(new MaterializeFormValidationRenderer()); 
    } 

    activate(project) { 
     this.project = project; 
    } 

    detached() { 
     this.validationController.reset(); 
    } 

    validateModel() { 
     return new Promise((resolve, reject) => { 
      this.validationController.validate().then(v => { 
       resolve(v.valid); 
      }); 
     }, function (error) { 
      reject(error); 
     }); 
    } 

    validateProject(e) { 
     this.validateModel().then(valid => { 
      if (valid) { 
       this.project.name = this.name; 
       this.name = ''; 
       //this.validationController.reset(); 
       this.dialogController.ok(this.project); 
      } 
     }); 
    } 

    cancel(e) { 
     this.name = ''; 
     //this.validationController.reset(); 
     this.dialogController.cancel(); 
    } 
} 

ためのビューモデルであります

import { inject } from 'aurelia-framework'; 
import { DialogService } from 'aurelia-dialog'; 

import { AddProject } from './add-project'; 
import { Project } from './project'; 

@inject(DialogService) 
export class ListProjects { 

    constructor(dialogService) { 
     this.dialogService = dialogService; 
    } 

    createProject() { 
     var project = new Project(); 
     this.dialogService.open({ viewModel: AddProject, model: project, lock: false }).whenClosed(response => { 
      if (!response.wasCancelled) { 
       console.log('good - ', response.output); 
      } 
     }); 
    } 

} 

検証をリセットする方法はありますか。私はthis.dialogController.cancel()で試してみましたが、動作しませんでした。

答えて

0

新しいAddProjectモーダルが作成されるたびに、ValidationControllerを新しいインスタンスでダイアログコンテナコンテキストにバインドする必要があります。

@inject(DialogController, NewInstance.of(ValidationController))

だけではなく

@inject(DialogController, ValidationController)

NewInstanceaurelia-dependency-injectionで見つけることができます(と同様aurelia-frameworkを介して公開される可能性があります)

すなわちを追加してみてください:詳細について import {inject, NewInstance} from 'aurelia-dependency-injection';

http://aurelia.io/hub.html#/doc/article/aurelia/validation/latest/validation-basics/12

アウレリアドクハブをチェックしてください
関連する問題