【问题标题】:Orbeon/XForms: Change dropdown values based on other input controlOrbeon/XForms:根据其他输入控件更改下拉值
【发布时间】:2019-04-30 08:32:39
【问题描述】:

我有一个文本控件my-text 和一个下拉列表my-dropdown。根据my-text 的内容,my-dropdown 的项集应该改变。不幸的是,单个下拉项目没有visibility 属性,所以我想到了一个不同的解决方案。在我的 Orbeon 表单的 <resource xml:lang="en"> 标记内,我定义了几个项目集:

<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”,那么应该使用第一个项目集,否则使用第二个。我怎样才能做到这一点? 在&lt;fr:dropdown-select1 ...&gt; 里面我需要类似的东西

<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 使用正确的项目集?

【问题讨论】:

    标签: forms orbeon xforms


    【解决方案1】:

    您的问题的直接答案是:*[local-name() = xxf:value('choice-control')]。所以你会:

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

    这样,您将获得不同的项集,具体取决于在 choice 控件中键入的值:

    但是,请记住,如果您在表单生成器中执行此操作,您对源的更改很容易丢失。例如,下次您更改控件名称时,ref 表达式将被重置。因此,最好找到另一种方法来实现这一目标。例如,您可以有 2 个下拉菜单,其中只有一个在任何时间点都可见,具体取决于另一个字段中的值输入。

    【讨论】:

    • 非常棒,正是我需要的,非常感谢!
    • 优秀的@Tagas,很高兴它对你有用,感谢你的更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多