Orbeon Multiple xforms: select1- ›набор предметов в различных условиях. как?

У меня есть требование, например, у меня есть 3 набора наборов элементов (A, B и C), которые должны находиться в раскрывающемся списке. и каждый набор элементов выбирается на основе некоторых условий, как показано ниже.

<xxforms:variable name="itemset-A-cnt" select="count(instance('data')/nodeA)" /> 
<xforms:group  ref=".[condition for itemset A]">
    <xforms:select1 ref="." incremental="true" appearance="minimal">
        <xforms:itemset  ref="instance('data')/nodeA">  <!--itemset A displayed if some if condition is true-->
            <xforms:label ref="@key" />
            <xforms:value ref="@key" />
        </xforms:itemset>
    </xforms:select1>
</xforms:group>
<xxforms:variable name="itemset-B-cnt" select="count(instance('data')/nodeB)" /> 
<xforms:group  ref=".[condition for itemset B]">
    <xforms:select1 ref="." incremental="true" appearance="minimal">
        <xforms:itemset  ref="instance('data')/nodeB">  <!--itemset B displayed if some if condition is true-->
            <xforms:label ref="@key" />
            <xforms:value ref="@key" />
        </xforms:itemseif if t>
    </xforms:select1>
</xforms:group>
<xforms:group  ref=".[$itemset-A-cnt =0 and $itemset-B-cnt =0]">
    <xforms:select1 ref="." incremental="true" appearance="minimal">
        <xforms:itemset  ref="instance('data')/nodeC">  <!--itemset C displayed if itemset A and B is empty-->
            <xforms:label ref="@key" />
            <xforms:value ref="@key" />
        </xforms:itemset>
    </xforms:select1>
</xforms:group>

В настоящее время мы достигли этого с помощью группы с условием для набора элементов A и набора элементов B для набора элементов C. Я обнаружил количество значений в наборе элементов A и B, назначил его переменным a-cnt и b_cnt с помощью xxforms: variable и создал группу для набор элементов C с проверкой размера.

У меня логика работает. Но я думаю, что это неправильный способ добиться чего-то подобного. Если есть способ разместить что-то вроде xxforms: if в наборе элементов, то я мог бы выполнить логику в одном элементе select1.


person Naveen Babu    schedule 25.10.2011    source источник


Ответы (1)


В XForms нет ограничений на количество xforms:item или xforms:itemset, которые вы можете использовать в select или select1. Кроме того, вы можете управлять набором элементов с помощью условия, например, с помощью if (condition) then items else ().

Итак, решение будет выглядеть так:

<xforms:select1>
    <xforms:itemset nodeset="if (condition A) then instance('data')/nodeA else ()">
        ...
    </xforms:itemset>
    <xforms:itemset nodeset="if (condition B) then instance('data')/nodeB else ()">
        ...
    </xforms:itemset>
    <xforms:itemset nodeset="if (condition C) then instance('data')/nodeC else ()">
        ...
    </xforms:itemset>
</xforms:select1>
person ebruchez    schedule 08.11.2011