【问题标题】:Using withMessageKey for custom validation messages in Aurelia在 Aurelia 中使用 withMessageKey 进行自定义验证消息
【发布时间】:2017-05-09 07:38:11
【问题描述】:

我有一个 Aurelia 应用程序,我正在使用 Aurelia 验证工具进行客户端验证。我想使用validationMessages 字典来定义自定义验证消息列表,以便使用withMessageKey 在我的应用程序中使用,如下所示:

import {validationMessages} from 'aurelia-validation';

validationMessages['customMessage1'] = `My first custom message`; 
validationMessages['customMessage2'] = `My second custom message`;

然后当我在类上设置验证规则时:

import { ValidationRules } from "aurelia-validation";

export class SampleObject {
    text1;
    text2; 

    constructor() {
        ValidationRules
            .ensure(a => a.text1)
                .required()
                    .then().satisfies(x => x.trim() === x)
                    .withMessageKey('customMessage1')
            .ensure(a => a.text2)
            .satisfies( x => x.length > 5)
                .withMessageKey('customMessage2')
            .on(this);
    }
}; 

验证有效,但自定义消息不显示,标准消息显示。例如,如果我改用 withMessage('My first custom message'),那么它确实有效,但我想将所有自定义消息保存在一个位置,以便在整个应用程序中使用。

我做错了什么?

【问题讨论】:

  • 您在哪个文件中定义您的自定义消息?您确定该文件已加载吗?您能否尝试将自定义消息放入您声明验证规则的同一文件中?
  • 我尝试将自定义消息放在一个单独的文件中,与类在同一个文件中(但在类之外),以及在使用类的视图模型中。这些都不起作用。如果我在类中包含验证消息,我就能让它工作,但这并不是我真正想要的,因为我想在整个应用程序中使用它们
  • 您可以尝试在您的班级中导入validationMessages 吗?将您在课堂上的第一行更改为import { ValidationRules, validationMessages } from "aurelia-validation";
  • 我可以通过将我的自定义 validationMessages 放在我的 app.js 的构造函数中来让它工作。这并不完全干净,所以我仍然需要想一个更好的方法来确保消息被加载。

标签: aurelia


【解决方案1】:

这是我的解决方案:

我在构造函数中创建了一个包含我的自定义消息的类:

import { validationMessages } from 'aurelia-validation';

export class CustomValidationMessages {
    constructor() {
        validationMessages['customMessage1'] = `My first custom message`; 
        validationMessages['customMessage2'] = `My second custom message`;
    }
}

然后,我将它注入我的app.js

import { inject } from 'aurelia-framework';
import { CustomValidationMessages } from "resources/utils/validation-messages";

@inject( CustomValidationMessages )
export class App {
    constructor() {
    }
    configureRouter(config, router) {
        .....
    }
}

而且我可以在整个应用程序的任何地方使用customMessage1customMessage2。我不确定这是不是最好的方法,但它确实有效。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 2012-12-12
    • 2012-03-03
    • 1970-01-01
    相关资源
    最近更新 更多