Aurelia диалог повторной проверки

1

Я пытаюсь использовать диалог 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(), но это не сработало.

Теги:
aurelia
validation
aurelia-validation

1 ответ

0

Вам необходимо привязать 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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню