У меня проблема, и надеюсь, что это только мой недостаток опыта в XForms. Мне нужно создать элемент флажка для данных, который определен как перечисление «Да» / «Нет». По сути, это просто логическое значение, но с другой парой значений. То, что я уже смог сделать, это то, что в принципе работает, но нуждается в дополнительном узле данных в модели:
<xhtml:html xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:f="http://orbeon.org/oxf/xml/formatting"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xhtml:head>
<xforms:model xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xs="http://www.w3.org/2001/XMLSchema" id="main-model">
<xforms:instance id="instance">
<main>
<Boolean>true</Boolean>
<YesNo>Yes</YesNo>
</main>
</xforms:instance>
<xforms:bind ref="Boolean" type="xsd:boolean" />
<xforms:bind ref="YesNo" constraint=". = 'Yes' or . = 'No'" />
</xforms:model>
</xhtml:head>
<xhtml:body>
<xforms:input ref="instance('instance')/Boolean">
<xforms:label>Boolean: </xforms:label>
<xforms:action ev:event="xforms-value-changed">
<xforms:setvalue ref="instance('instance')/YesNo" value="if ( instance('instance')/Boolean = 'true' ) then 'Yes' else 'No'" />
</xforms:action>
</xforms:input>
<br/>
<xforms:output ref="instance('instance')/Boolean">
<xforms:label>Boolean:</xforms:label>
</xforms:output>
<br/>
<br/>
<xforms:select ref="instance('instance')/YesNo" appearance="full">
<xforms:label>Yes/No: </xforms:label>
<xforms:item>
<xforms:label></xforms:label>
<xforms:value>Yes</xforms:value>
</xforms:item>
<xforms:action ev:event="xforms-value-changed">
<xforms:setvalue ref="instance('instance')/YesNo" value="if ( instance('instance')/YesNo = 'Yes' ) then 'Yes' else 'No'" />
</xforms:action>
</xforms:select>
<br/>
<xforms:output ref="instance('instance')/YesNo">
<xforms:label>Yes/No:</xforms:label>
</xforms:output>
</xhtml:body>
</xhtml:html>
Этот пример содержит два возможных решения:
Первым является стандартный логический флажок, связанный с логическим узлом экземпляра с действием, которое устанавливает значение «Да» / «Нет» для второго узла. Это решение работает хорошо, но требует второго узла данных, который я не могу создать из-за схемы (в приведенном выше примере я обычно мог бы создать второй экземпляр для хранения этого значения, но в реальном проекте эти флажки находятся в блоке повтора, и мне пришлось бы создать дополнительную таблицу значения для этого, что, кажется, очень сложно),
Во-вторых, выберите элемент с единственным значением «Да» и действием, которое пытается установить значение «Нет», когда установлено пустое значение (невыбранный элемент). К сожалению, когда этот элемент не выбран, он не может выбрать его снова (отменяет выбор автоматически). Есть ли у вас решение для такой проблемы?
Заранее спасибо