如何在Aurelia验证中接受属性彼此依赖的空值?

问题描述

我正在尝试验证一些相互依赖的温度值,但我也想为它们接受空值。例如,我有以下代码

VadliationRules.customrule(
"minT",(value,obj: Object,min) => {
 let converted = parseFloat(value)
 return converted >= min && converted < obj.MaxTemperature
},'');

ValidationRules.customrule(
"maxT",max) => {
 let converted = parseFloat(value)
 return converted <= max && converted > obj.MinTemperature
},'');

ValidationRules
.ensure((p: Object) => p.MinTemperature)
.satisfiesRule('minT',-15.0)
.withMessageKey('min_temp')

.ensure((p: Object) => p.MaxTemperature)
.satisfiesRule('maxT',50.0)
.withMessageKey('max_temp')

.on(Object)

let MinTemperature : number;
let MaxTemperature : number;

我尝试了以下选项,但它们似乎不起作用(因为我想依赖于其他属性

// Example 1
VadliationRules.customrule(
"minT",min) => {
 let converted = parseFloat(value)
 return converted >= min && converted < obj.MaxTemperature || converted == undefined || obj.MaxTemperature == null
},'');

// Example 2
VadliationRules.customrule(
"minT",min) => {
 let converted = parseFloat(value)
 return converted >= min && converted < obj.MaxTemperature || converted == undefined || converted.toString() == ""
},'');

如何满足两个字段对其他属性的依赖,同时接受两个字段的空值?

解决方法

尝试以下

return converted >= min && (converted < obj.MaxTemperature || obj.MaxTemperature == null)
  1. 当不使用括号时,如果您的obj.MaxTemperature == null,则无论您是否进行第一次检查都将通过
  2. FYI,obj.MaxTemperature == null还会检查未定义的内容,因此您可以忽略该部分(请参见http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3