Orbeon/XForms: 根据其他输入控件更改下拉值
Orbeon/XForms: Change dropdown values based on other input control
我有一个文本控件 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" 那么应该使用第一个项目集,否则使用第二个。我怎样才能做到这一点?
在 <fr:dropdown-select1 ...>
里面我需要类似
的东西
<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 使用正确的项目集?
您问题的直接答案是:*[local-name() = xxf:value('choice-control')]
。所以你会:
<xf:itemset
ref="
$form-resources/
*[local-name() = xxf:value('choice-control')]/
item
">
这样,根据在 choice
控件中键入的值,您将获得不同的项目集:
但是,请记住,如果您在 Form Builder 中执行此操作,则您对源代码所做的更改很容易丢失。例如,下次您更改控件名称时,该 ref
表达式将被重置。因此,最好找到另一种方法来实现这一目标。例如,您可以有 2 个下拉菜单,其中只有一个在任何时间点可见,具体取决于另一个字段中的值输入器。
我有一个文本控件 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" 那么应该使用第一个项目集,否则使用第二个。我怎样才能做到这一点?
在 <fr:dropdown-select1 ...>
里面我需要类似
<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 使用正确的项目集?
您问题的直接答案是:*[local-name() = xxf:value('choice-control')]
。所以你会:
<xf:itemset
ref="
$form-resources/
*[local-name() = xxf:value('choice-control')]/
item
">
这样,根据在 choice
控件中键入的值,您将获得不同的项目集:
但是,请记住,如果您在 Form Builder 中执行此操作,则您对源代码所做的更改很容易丢失。例如,下次您更改控件名称时,该 ref
表达式将被重置。因此,最好找到另一种方法来实现这一目标。例如,您可以有 2 个下拉菜单,其中只有一个在任何时间点可见,具体取决于另一个字段中的值输入器。