首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Aurelia对话框重复验证

Aurelia对话框重复验证
EN

Stack Overflow用户
提问于 2017-08-06 04:08:36
回答 1查看 352关注 0票数 1

我正在尝试使用aurelia-dialog和aurelia-validation。当我第一次打开弹出窗口并触发验证时,我得到了一个正确的错误。每当我在该事件之后重新打开弹出窗口时,我都会得到相同的验证重复两次、三次等等。

这是弹出窗口的视图模型

代码语言:javascript
复制
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调用弹出窗口

代码语言:javascript
复制
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(),但它不起作用。

EN

回答 1

Stack Overflow用户

发布于 2017-08-06 04:38:58

每次创建新的AddProject模式时,都需要使用新实例将ValidationController绑定到对话框容器上下文。

尝试添加

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

而不是仅仅

@inject(DialogController, ValidationController)

NewInstance可以在aurelia-dependency-injection中找到(也可以通过aurelia-framework公开)

即:import {inject, NewInstance} from 'aurelia-dependency-injection';

有关更多信息,请查看Aurelia文档中心(http://aurelia.io/hub.html#/doc/article/aurelia/validation/latest/validation-basics/12)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45525964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档