2

作为参考,已经问过的最相似的问题是:https ://stackoverflow.com/questions/8667849/making-xforms-enforce-the-constraint-and-type-model-item-properties-only-when-fi不同之处在于我不能使用“相关”属性,因为我确实希望该字段可见且可访问。

我正在尝试制作一个具有以下属性的 XForms 表单:

  1. 它显示一个名为“信息”的文本字段。(例如)
  2. 此字段不得为必填项,因为可能不需要输入数据。(或者此数据将在以后输入。)
  3. 但是,如果在此字段中输入数据,则必须遵守指定的约束
  4. 我无法将该字段标记为不相关,因为这会隐藏该字段并且可能需要在其中输入一些数据。

现在的问题是即使该字段中没有数据,约束仍然被强制执行(即即使它没有被标记为“必需”)。

我查看了XForms 1.1 规范,但是它似乎没有描述属性“必需”和“约束”应该如何交互。

我看到的唯一选择是将一部分添加到约束中,以便允许空值。例如:

. = '' 或 <实际约束>

然而,我不喜欢这样。将其添加到每个此类字段中感觉像是一种解决方法。

有没有其他方法可以表达非必填字段不需要匹配该字段的约束?(我错过了什么吗?)

4

1 回答 1

2

在 XForms 1.1 中,required有两个目的:

  1. 根据需要标记该字段(实现可以设置控件样式以反映这一点,例如使用“*”)
  2. 参与验证过程

后者在4.3.3 xforms-revalidate 事件中描述。

当且仅当以下条件成立时,实例节点才有效:

条件之一是:

如果所需的模型项属性为 true,则该值为非空

因此and,影响验证的所有方面之间都是合乎逻辑的。

我可以看到事情可能会有所不同,例如说required="false()"可能会禁用其余的验证。然而,这不是 XForms 采用的方法。

基于此,作为约束的一部分检查空虚并没有错。

XForms 2.0 可能会添加自定义 XPath 函数,这可能有助于逻辑的重用:

<bind ref="information" constraint="my:constraint(.)">

此外,如果约束可以用一种类型来表示,那么您可以使用XForms 名称空间中的一种模式类型,它允许空值有效。例如xforms:double认为空字符串和42是有效值,但不是gaga

于 2012-04-11T16:58:08.413 回答