Можно установить два значения для двух разных узлов из пользовательского ввода в XForms? - PullRequest
1 голос
/ 10 июня 2010

Я хотел бы установить два значения для двух разных узлов из пользовательского ввода в 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"/>

и мой код пользовательского интерфейса выглядит так:

<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 голосов
/ 11 июня 2010

Вы также можете использовать расчета:

<xf:bind nodeset="instance('criteria_data')/criteria/set/root" calculate="instance
('choices')/choice[. = instance('criteria_data')/criteria/set/criterion]/../root">
0 голосов
/ 11 июня 2010

Вы должны объявить определенные действия, такие как "xf: setvalue", которые должны быть выполнены для события "xforms-select".

-Alain

...