验证.passes如果null / empty / length == 0不会触发

时间:2016-05-13 11:18:23

标签: aurelia aurelia-validation

当财产没有价值时,似乎没有调用验证 这是我用来尝试使其工作的代码:

.ensure('baseContent.SetNamePrint').passes((name) =>
{
    var webNameLength = this.baseContent.SetNameWeb.length;
    var printNameLength = name.length;

    console.log(webNameLength);
    console.log(printNameLength);

    if ((webNameLength > 1 && webNameLength < 51) || (printNameLength > 1 && printNameLength < 51)) {
        return true;
    }
    return false;
}).withMessage('Web Name or Print Name is Required')

只有当属性的值更改为具有长度的内容时,才会触发通过,当它为空时(空白字符串)没有任何反应。

我需要的是每次更改值时都会调用.passes(),而不仅仅是在有更改并且它有值时。

2 个答案:

答案 0 :(得分:0)

您需要使用isNotEmpty另外约束目标属性。

.ensure('baseContent.SetNamePrint').isNotEmpty().passes(...

来自文档:

  

始终先检查isNotEmpty规则,然后再检查其他规则   验证规则。这意味着没有isNotEmpty规则,   .hasMinLength(5)规则仍然会将''的值视为有效   因为该字段是空的。

PS:我听说aurelia-validation正在重写。也许这就是为什么我不能再从主分支中找到文档,而是在另一个分支中here

答案 1 :(得分:0)

为了得到我想要的东西,我最终得到了以下代码。

this.validator = this.validation.on(this)
    .ensure('SetNameWeb', (config) => {config.computedFrom(['SetNamePrint', 'SetNameWeb'])})
        .if(() => { return this.HasImageEitherPrintNameOrWebName === false })
            .isNotEmpty().withMessage('or "Print Name" is required')
            .hasLengthBetween(0, 50)
        .endIf()
    .ensure('SetNamePrint', (config) => {config.computedFrom(['SetNameWeb', 'SetNamePrint'])})
        .if(() => { return this.HasImageEitherPrintNameOrWebName === false })
            .isNotEmpty().withMessage('or "Web Name" is required')
            .hasLengthBetween(0, 50)
        .endIf()

这给了我所需的功能,两个字段都相互更新。

然而,aurelia代码中存在一个错误,它处理的计算方法需要修复才能使其正常工作。

这个问题与aurelia-validation@0.6.8有关,现在有一个新版本以完全不同的方式工作,所以如果你遇到这个问题我的建议是更新。