当财产没有价值时,似乎没有调用验证 这是我用来尝试使其工作的代码:
.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(),而不仅仅是在有更改并且它有值时。
答案 0 :(得分:0)
您需要使用isNotEmpty
另外约束目标属性。
.ensure('baseContent.SetNamePrint').isNotEmpty().passes(...
来自文档:
PS:我听说aurelia-validation正在重写。也许这就是为什么我不能再从主分支中找到文档,而是在另一个分支中here始终先检查isNotEmpty规则,然后再检查其他规则 验证规则。这意味着没有isNotEmpty规则, .hasMinLength(5)规则仍然会将''的值视为有效 因为该字段是空的。
答案 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有关,现在有一个新版本以完全不同的方式工作,所以如果你遇到这个问题我的建议是更新。