Я пытаюсь использовать диалог aurelia вместе с проверкой aurelia. Дело в том, что когда я открываю всплывающее окно в первый раз, и я запускаю проверку, я получаю правильную ошибку. Когда я снова открываю всплывающее окно после этого события, я получаю такую же проверку дважды, три раза и т.д.
Это модель представления для всплывающего окна
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();
}
}
Я вызываю всплывающее окно из dialogService
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(), но это не сработало.
Вам необходимо привязать ValidationController к контексту контейнера диалога с новым экземпляром каждый раз, когда создается новый мода AddProject.
Попробуйте добавить
@inject(DialogController, NewInstance.of(ValidationController))
а не просто
@inject(DialogController, ValidationController)
NewInstance
может быть обнаружен при aurelia-dependency-injection
(и может быть также обнаружен через aurelia-framework
)
т.е.: import {inject, NewInstance} from 'aurelia-dependency-injection';
Для получения дополнительной информации посетите Aurelia Doc Hub (http://aurelia.io/hub.html#/doc/article/aurelia/validation/latest/validation-basics/12)