2012-04-11 11 views
2

作爲參考,已經提出的最類似的問題是:https://stackoverflow.com/questions/8667849/making-xforms-enforce-the-constraint-and-type-model-item-properties-only-when-fi區別在於我不能使用「相關」屬性,因爲我確實希望該字段可見且可訪問。'約束'和'必需'屬性的XForms關係

我試圖做一個具有以下屬性的XForms表單:

  1. 它顯示名爲「信息」的文本字段。 (例如)
  2. 此字段不能爲要求,因爲可能不需要輸入數據。 (或將在稍後輸入此數據。)
  3. 但是,如果在此字段中輸入數據,則必須遵守指定的約束條件
  4. 我不能將該字段標記爲不是相關,因爲這會隱藏字段並且可能需要輸入一些數據。

現在的問題是,即使該字段中沒有數據,該約束仍然是強制執行的(即使它沒有標記爲'required')。

我看了一下XForms 1.1 specification,但它似乎沒有描述屬性'required'和'constraint'是如何相互作用的。

我看到的唯一選擇是向約束添加一個零件,以便允許一個空值。 例如:

。 =''或<實際約束>

但是,我不喜歡這樣。這感覺就像是一個解決方法,將其添加到每個這樣的領域。

是否有任何其他方式來表達非必填字段不需要匹配該字段的約束? (我缺少的東西嗎?)

回答

2

在XForms中1.1,required有兩個目的:

  1. 標記字段作爲必需的(實現可以樣式控制,以反映這一點,例如用 「*」)
  2. 參與驗證過程

後者在4.3.3 The xforms-revalidate Event中描述。

實例節點是有效的,當且僅當以下條件成立:

而條件之一是:

值爲非空,如果需要的模型項目財產是真實的

所以這是邏輯and之間的所有影響驗證方面。

我可以看到情況可能會有所不同,例如說required="false()"可能會禁用驗證的其餘部分。然而,這不是XForms所採用的方法。

基於此,檢查空白作爲約束的一部分沒有任何錯誤。

的XForms 2.0可以添加自定義XPath功能,這可能與邏輯的重用幫助:

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

另外,如果約束可以用一個類型來表示,您可以使用schema types in the XForms namespace之一,它允許空值有效。例如xforms:double認爲空字符串和42爲有效值,但不是gaga

+0

好的,所以這些數據類型允許使用空字符串值。這很好。我所期望的是對於required =「false()」,它並沒有完全忽略指定的約束,而是允許「空」的答案,因爲沒有其他方式表明你不打算回答題。當然,如果給出答案,它應該在指定的約束範圍內。否則,不能保證您會從表單中獲取有效的數據。無論如何,我現在有多種方式來實現我的目標:) – Danny 2012-04-12 08:46:42