У меня проблема с XForms, которые я использую в Orbeon Forms. Я использую fr:box-select
элемент управления следующим образом:
<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-change, 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>
Однако это не совсем то, что мне нужно. Я мог бы сделать эту работу, но это потребовало бы намного больше работы, потому что мне нужно знать, какие из них отменены, чтобы изменить отображение для пользователя.