我的页面上有一个重复的网格。当其中一项发生变化时,我想根据字段的值向特定的 URL 发出请求。
对于非重复元素,我发现可以通过像这样直接检索字段值来使其工作:
但是,我不知道如何使用重复网格来做到这一点。
我确实有一个疯狂的想法,编写一个操作来识别重复网格的哪个实例已更改,并将其写入我可以使用的字段:
<xf:action id="GetCurrentlyItem-binding">
<xf:action ev:event="xforms-value-changed" ev:observer="all-fields" if="true()">
<xf:action class="fr-set-control-value-action">
<xf:var name="control-name" value="'constant'" />
<xf:var
name="control-value"
value="if (name(event('xxf:binding')) = 'targetName') then event('xxf:binding') else //constant"
/>
</xf:action>
</xf:action>
</xf:action>
</xf:action>
这种方法可行,但该服务是在字段更新之前调用的,因此它在实践中不起作用(我确实看到了有关 xxf:binding 导致此问题的警告)。而且这个解决方案似乎有点令人讨厌。
如果有一种方法可以强制执行操作的顺序,以便在调用服务之前触发该操作,那么这将起作用。但感觉正确的解决方案确实是找到一种方法将重复行的编辑实例中的值添加到 URL 中。
提前非常感谢。
假设您有一个接受参数
p1
的服务,然后将其作为 ?p1=some-value
传递给服务。
在操作中,您可以决定在重复网格中的值发生变化时调用此服务,并将控件的值作为
p1
传递,如下所示。如果您对给定控件 C1 的值的更改做出反应并发送另一个控件 C2 的值,Orbeon Forms 将自动选择与已更改的 C1 位于同一“行”上的特定 C2。