可以在XForms中为用户输入的两个不同节点设置两个值吗?

时间:2010-06-10 19:28:39

标签: xml binding input xforms

我想为XForms中的用户输入设置两个不同节点的两个值。如果可能的话,我很好奇如何做到这一点。

例如,如果我有以下数据模型:

<xf:instance id="criteria_data" xmlns="">
    <criteria>
        <set>
           <root></root>
           <criterion></criterion>
        </set>
    </criteria>
</xf:instance>

<xf:instance id="choices" xmlns="">
    <choices>
        <root label="The Choices">/AAA</root>
        <choice label="BBB">/@BBB</choice>
    </choices>
</xf:instance>

<xf:instance id="choices" xmlns="">
    <choices>
        <root>/AAA</root>
        <choice label="BBB">/@BBB</choice>
        <choice label="CCC">/@CCC</choice>
    <choices>
</xf:instance>

<xf:bind id="data_criterion" nodeset="instance('criteria_data')/criteria/set/criterion"/>         
<xf:bind id="data_root" nodeset="instance('criteria_data')/criteria/set/root"/>
<xf:bind id="choices_root" nodeset="instance('choices')/root"/>
<xf:bind id="choices" nodeset="instance('choices')/choice"/>

我的ui代码如下:

<xf:select bind="data_criterion" appearance="full">
    <xf:label>Your choices:</xf:label>    
    <xf:itemset bind="choices">
       <xf:label ref="@label"></xf:label>
       <xf:value ref="."></xf:value>
    </xf:itemset>
</xf:select>    

但我基本上希望它像这样(虽然这是无效的,根本不会产生任何xml):

<xf:select appearance="full">
    <xf:label>Your choices:</xf:label>    
    <xf:itemset bind="choices">
        <xf:label ref="@label"></xf:label>
        <xf:value bind="data_criterion" ref="."></xf:value>
        <xf:value bind="data_root" ref="instance('choices')/root"></xf:value>
    </xf:itemset>
</xf:select>    

我想要实现的XML输出(如果用户检查“BBB”):

<criteria>
    <set>
       <root>/AAA</root>
       <criterion>/@BBB</criterion>
    </set>
</criteria>

如何为一个复选框选项设置这两个节点?

希望一切都有意义......

谢谢! :)

2 个答案:

答案 0 :(得分:0)

您应该在事件“xforms-select”上声明特定的操作,例如“xf:setvalue”。

-Alain

答案 1 :(得分:0)

你也可以使用calculate:

<xf:bind nodeset="instance('criteria_data')/criteria/set/root" calculate="instance
('choices')/choice[. = instance('criteria_data')/criteria/set/criterion]/../root">