我在Orbeon Forms上運行的XForms中遇到了這個問題。我使用的是fr:box-select
控制如下:如何使用xforms的選定值執行某些操作:每次選擇它們時都要進行選擇?
<fr:box-select bind="box-select-bind" id="box-select-control">
<xforms:action ev:event="xforms-value-changed">
<xxforms:variable name="selected-value" select="."/>
<xforms:message level="modal">Hello:<xforms:output select="$selected-value" />
</xforms:message>
</xforms:action>
<xforms:itemset nodeset="instance('codes')/box-select/item">
<xforms:label ref="label"/>
<xforms:value ref="value"/>
</xforms:itemset>
</fr:box-select>
的結合是一個簡單的XML文件:
<box-results></box-results>
的代碼XML看起來像:
<box-select>
<item>
<label>Cat</label>
<value>cat</value>
</item>
<item>
<label>Dog</label>
<value>dog</value>
</item>
<item>
<label>Bird</label>
<value>bird</value>
</item>
<item>
<label>Fish</label>
<value>fish</value>
</item>
</box-select>
當我檢查中的條目框中,我的節點<box-results>
獲得更新,所選值由空格分隔,這似乎是預期的。但是,我似乎無法找到有關如何處理選定值的任何文檔。我想要訪問剛剛選擇的值,取消選擇並在xpath中使用此項的值。所以,如果選擇了值,那麼我這樣做:
<setvalue
ref="somexpath[id=$selected-value]/display
value="'true'"/>
如果這個值是取消我這樣做:
<setvalue
ref="somexpath[id=$selected-value]/display
value="'false'"/>
基本上,我只是想知道的情況下使用,以及在火災發生時如何獲得價值。然後我想在xpath中使用這個值。我將使用它來隱藏/顯示錶單的一部分。使用xforms-value-changed事件Xpath「。」不會像我在「select1」控件中那樣返回我所期望的。
我可以遍歷所有被選擇的,像這樣的價值觀:
<xforms:action ev:event="xforms-select" xxforms:iterate="for $s in tokenize(instance('data-inst')/box-results,'\s')return xxforms:element('text',$s)">
<xforms:message level="modal">Hello selected:<xforms:output select="$s" />
</xforms:action>
然而,這不正是我需要的。我可能能夠完成這項工作,但這需要更多的工作,因爲我需要知道哪些內容被取消選擇來更改用戶的顯示內容。
嘿,感謝您回覆。這正是我想要做的,但是想看看是否有辦法獲得選定/取消選擇的單個項目。我沒有意識到你可以使用setvalue命令的迭代,謝謝!有一件事。我無法獲得使用「。」的標記大小。 xpath,我不得不去我的實例中存儲數據,像這樣:select =「tokenize(instance('codes')/ box-results,'\ s +')」。不知道這是爲什麼,但它以任何速度工作。再次感謝您向我展示了一些關於orbeon我不知道的事情。 – devo
右鍵:對於XBL組件,與常規XForms控件不同,事件處理程序運行的上下文不會被組件上的'ref'屬性更改。在我的例子中,它的作用是「機會」,因爲我有一個不改變上下文的'「。但是在更一般的情況下,你是對的:你不能在事件處理函數中使用'.',並且指望這是''所綁定的節點。 –
avernet
要完成@ avernet的評論:這裏的XPath上下文的行爲是一個錯誤。 – ebruchez