Хороший вопрос. И, к сожалению, это не так просто сделать, как следовало бы:
Если вы просто хотели, чтобы переключатель удаления был скрыт, а не отключен, вы можете заменить <xforms:item>
для «Удалить» на <xforms:itemset ref="…">
, который вы связываете с узлом, который вы делаете неактуальным, когда вы хочу, чтобы этот переключатель не отображался. Но вы не можете использовать эту же технику, чтобы отключить переключатель, привязав набор элементов к узлу, который вы делаете доступным только для чтения. (И да, было бы хорошо, если бы вы могли это сделать.)
В нынешнем виде, я думаю, вам нужно:
- Создать 2
<xforms:select1>
. Один для «Добавить», другой для «Удалить», так что вы можете сделать второй только для чтения при некоторых условиях.
- Чтобы сделать его доступным только для чтения, но при этом «Add» также не будет доступен только для чтения, вам необходимо привязать их к 2 отдельным узлам.
- Если вы хотите иметь 1 узел с A или D, вам нужно создать вычисление для заполнения этого узла на основе 2 значений.
- Вы хотите, чтобы значения были эксклюзивными, и их не будет, если у вас есть два
<xforms:select1>
, поэтому вам нужно отменить выбор «удалить», когда выбрано «добавить», реагируя на xforms-select
, и наоборот.
В модели вы бы имели:
<xforms:instance>
<instance>
<add/>
<delete/>
<add-delete/>
<delete-enabled>true</delete-enabled>
</instance>
</xforms:instance>
<xforms:bind ref="add-delete" calculate="string-join((../add, ../delete), ' ')"/>
<xforms:bind ref="delete" readonly="../delete-enabled = 'false'"/>
А в виде:
<xforms:select1 ref="instance()/add" appearance="full">
<xforms:item>
<xforms:label>Add</xforms:label>
<xforms:value>A</xforms:value>
</xforms:item>
<xforms:setvalue ev:event="xforms-select" ref="instance()/delete"/>
</xforms:select1>
<xforms:select1 ref="instance()/delete" appearance="full">
<xforms:item>
<xforms:label>Delete</xforms:label>
<xforms:value>D</xforms:value>
</xforms:item>
<xforms:setvalue ev:event="xforms-select" ref="instance()/add"/>
</xforms:select1>
И посмотрите этот Гист для полного источника этого примера.