作为参考,最常见的问题是:https://stackoverflow.com/questions/8667849/making-xforms-enforce-the-constraint-and-type-model-item-properties-only-when-fi不同之处在于我无法使用“相关”属性,因为我希望该字段可见且可访问。
我正在尝试制作具有以下属性的XForms表单:
现在的麻烦是,即使字段中没有数据,仍然会强制执行约束(即使它没有标记为'required')。
我已经看了XForms 1.1 specification,但它似乎没有描述属性'required'和'constraint'应该如何相互作用。
我看到的唯一选项是在约束中添加一个部分,以便允许空值。 e.g:
。 =''或< actual-constraint>
但是,我不喜欢这个。感觉就像将解决方法添加到每个这样的领域。
有没有其他方法可以表明非必填字段不需要匹配该字段的约束? (我错过了什么吗?)
答案 0 :(得分:2)
在XForms 1.1中,required
有两个目的:
后者在4.3.3 The xforms-revalidate Event中描述。
当且仅当满足以下条件时,实例节点才有效:
其中一个条件是:
如果所需的模型项属性为true,则该值为非空
因此,在影响验证的所有方面之间存在逻辑and
。
我可以看到事情可能会有所不同,例如:说required="false()"
可以禁用其余的验证。然而,这不是XForms采用的方法。
基于此,作为约束的一部分,检查空虚是没有错的。
XForms 2.0可能会添加自定义XPath函数,这可能有助于重用逻辑:
<bind ref="information" constraint="my:constraint(.)">
此外,如果约束可以用类型表示,您可以使用schema types in the XForms namespace中的一个,它允许空值有效。例如,xforms:double
认为空字符串和42
是有效值,而不是gaga
。