2011-10-25 1 views
0

私はドロップセットの下に来るべきitemets(A、BおよびC)の3つのセットがあるように私は要件があります。各項目セットは、以下に示すようないくつかの条件に基づいて選択されます。Orbeon複数のxforms:select1->異なる条件のitemsetベース。の仕方?

現在、我々はこれを達成する方法私は項目セットA内の値の数を発見し、Bを使用して変数に-CNTとb_cntそれを割り当てられた項目セットCのアイテムセットAとアイテムセットB のための条件を持つグループを使用している
<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> 

xxforms:variableを呼び出し、サイズチェックを伴うitemset Cのグループを作成しました。

ロジックが私に役立ちます。しかし、私はこれがこのようなことを達成する正しい方法ではないと思います。 アイテムセットにxxforms:ifのようなものを置く方法がある場合、私は単一のselect1でロジックを実行できます。

答えて

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> 
+0

おかげで、私はそれを試してみて、あなたが知っているだろう。 –