如何在下拉列表 select 上重新初始化 Orbeon 中的 xforms:repeat 元素?
How to re-initialize a xforms:repeat element in Orbeon, on dropdown select?
我有一个 table 是用 xforms:repeat 元素制作的。
1) 当我第一次 运行 表单时,所有字段和计算都符合预期,在下拉菜单中默认项目是 selected。
下拉列表 selection 更改重复元素的字段(来自 xpath 表达式)。
2) 当我更改下拉列表的值时,它会保留输入先前计算的值,它们不是 updated/recalculated!
3) 但是很奇怪,如果我重新select 清空选择并重新选择一个 SelectItem,所有的计算都正常!
因此,每次我 select EmptyItem 然后 select 一个 Item,计算都按预期进行!
当下拉菜单的值发生变化时,我想直接重新计算重复的数据!
...
<xf:repeat ref="instance('fr-form-instance')/Items">
...
<xf:action ev:event="xforms-enabled xxforms-iteration-moved">
<xf:setvalue ref="(//Item)[xxf:repeat-position()]/TotalCredit" value="someCalculationHere"/>
<xf:setvalue ref="(//Item)[xxf:repeat-position()]/TotalContingent" value="someCalculationHere"/>
<xf:recalculate model="fr-form-model"/>
</xf:action>
...
在默认选项中(在我的情况下是第一个选项,一切都符合预期)。
但如果我选择别的东西,它会保留以前的值!
您可以通过监听事件和设置值来实现这一点,但我强烈建议您使用计算。使用计算更具声明性(或者有些人可能会说 "Excel-like"),它确保在必要时进行计算,而无需确保您正在收听适当的事件。
从您的表单外观来看,它似乎是使用表单生成器创建的。如果是这种情况,您可以将计算放在 Control Settings 对话框中,在 Formulas 选项卡中,在 Calculated 中值.
我有一个 table 是用 xforms:repeat 元素制作的。
1) 当我第一次 运行 表单时,所有字段和计算都符合预期,在下拉菜单中默认项目是 selected。
下拉列表 selection 更改重复元素的字段(来自 xpath 表达式)。
2) 当我更改下拉列表的值时,它会保留输入先前计算的值,它们不是 updated/recalculated!
3) 但是很奇怪,如果我重新select 清空选择并重新选择一个 SelectItem,所有的计算都正常!
因此,每次我 select EmptyItem 然后 select 一个 Item,计算都按预期进行!
当下拉菜单的值发生变化时,我想直接重新计算重复的数据!
...
<xf:repeat ref="instance('fr-form-instance')/Items">
...
<xf:action ev:event="xforms-enabled xxforms-iteration-moved">
<xf:setvalue ref="(//Item)[xxf:repeat-position()]/TotalCredit" value="someCalculationHere"/>
<xf:setvalue ref="(//Item)[xxf:repeat-position()]/TotalContingent" value="someCalculationHere"/>
<xf:recalculate model="fr-form-model"/>
</xf:action>
...
在默认选项中(在我的情况下是第一个选项,一切都符合预期)。
但如果我选择别的东西,它会保留以前的值!
您可以通过监听事件和设置值来实现这一点,但我强烈建议您使用计算。使用计算更具声明性(或者有些人可能会说 "Excel-like"),它确保在必要时进行计算,而无需确保您正在收听适当的事件。
从您的表单外观来看,它似乎是使用表单生成器创建的。如果是这种情况,您可以将计算放在 Control Settings 对话框中,在 Formulas 选项卡中,在 Calculated 中值.