Можно ли отключить один из вариантов среди группы переключателей? - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть переключатель с двумя элементами.

<xforms:select1 ref="add-delete" appearance="full">
    <xforms:item>
        <xforms:label>Add</xforms:label>
        <xforms:value>A</xforms:value>
    </xforms:item>
    <xforms:item>
        <xforms:label>Delete</xforms:label>
        <xforms:value>D</xforms:value>
    </xforms:item>
</xforms:select1>

Я хочу отключить только радиокнопку «Удалить», а не радиокнопку «Добавить» при условии X. Как я могу это сделать?

Я пытался использовать атрибут класса с xforms: item, но это не работает. Есть ли другой способ сделать это?

1 Ответ

2 голосов
/ 15 ноября 2011

Хороший вопрос. И, к сожалению, это не так просто сделать, как следовало бы:

Если вы просто хотели, чтобы переключатель удаления был скрыт, а не отключен, вы можете заменить <xforms:item> для «Удалить» на <xforms:itemset ref="…">, который вы связываете с узлом, который вы делаете неактуальным, когда вы хочу, чтобы этот переключатель не отображался. Но вы не можете использовать эту же технику, чтобы отключить переключатель, привязав набор элементов к узлу, который вы делаете доступным только для чтения. (И да, было бы хорошо, если бы вы могли это сделать.)

В нынешнем виде, я думаю, вам нужно:

  1. Создать 2 <xforms:select1>. Один для «Добавить», другой для «Удалить», так что вы можете сделать второй только для чтения при некоторых условиях.
  2. Чтобы сделать его доступным только для чтения, но при этом «Add» также не будет доступен только для чтения, вам необходимо привязать их к 2 отдельным узлам.
  3. Если вы хотите иметь 1 узел с A или D, вам нужно создать вычисление для заполнения этого узла на основе 2 значений.
  4. Вы хотите, чтобы значения были эксклюзивными, и их не будет, если у вас есть два <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>

И посмотрите этот Гист для полного источника этого примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...