Orbeon / XForms: изменение выпадающих значений на основе другого элемента управления вводом - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть текстовый элемент управления my-text и выпадающий список my-dropdown.В зависимости от содержимого my-text набор элементов my-dropdown должен измениться.К сожалению, для отдельных выпадающих элементов нет свойства visibility, поэтому я подумал о другом решении.Внутри тега <resource xml:lang="en"> моей формы Orbeon я определил несколько наборов элементов:

<first-itemset>
    <item>
        <label>AAA</label>
        <value>a</value>
    </item>
    <item>
        <label>BBB</label>
        <value>b</value>
    </item>
</first-itemset>


<second-itemset>
    <item>
        <label>XXX</label>
        <value>x</value>
    </item>
    <item>
        <label>YYY</label>
        <value>y</value>
    </item>
</second-itemset>

Теперь, если содержимое my-text равно «first-itemset», тогда должен использоваться первый набор элементов, в противном случае - второй.Как я могу это сделать?Внутри <fr:dropdown-select1 ...> мне нужно что-то вроде

<xf:itemset ref="$form-resources/CONTENT_OF_MY-TEXT_HERE/item">
    <xf:label ref="label"/>
    <xf:value ref="value"/>
</xf:itemset>

Что мне нужно написать вместо CONTENT_OF_MY-TEXT_HERE, чтобы получить фактический контент, чтобы orbeon использовал правильный набор элементов?

1 Ответ

0 голосов
/ 29 ноября 2018

Прямой ответ на ваш вопрос: *[local-name() = xxf:value('choice-control')].Таким образом, у вас будет:

<xf:itemset 
    ref="
        $form-resources/
        *[local-name() = xxf:value('choice-control')]/
        item
    ">

При этом вы получите другой набор элементов в зависимости от значения, введенного в элементе управления choice:

Different itemset based on other control

Однако имейте в виду, что если вы делаете это в Form Builder, ваши изменения в источнике могут быть довольно легко потеряны.Например, при следующем изменении имени элемента управления это выражение ref будет сброшено.Так что было бы лучше найти другой способ добиться этого.Например, у вас может быть 2 раскрывающихся списка, из которых только один виден в любой момент времени, в зависимости от значения, введенного в другом поле.

...