当用户单击 span 元素并从 jQuery 更新当前 XML 实例时,我想在 JavaScript 中执行一些逻辑:
(我在网上看到过两个类似的问题,但从未得到解答!)
XForms:
<xhtml:span class="buttonPlusOne" id="plusVat">+</xhtml:span>
<xf:output ref="instance('submitted_instance')/TotVATAmnt"></xf:output>
<xf:input id="changeVatTotal" ref="instance('submitted_instance')/TotVATAmnt"></xf:input>
JavaScript:
$('span.buttonPlusOne').on('click', function () {
// do some logic and increment value for 0.01
orbeonElId = $(this).siblings('#changeVatTotal').children('input').attr('id');
// alert(orbeonElId) produces right id (changeVatTotal$xforms-input-1)
// alert(newValue) produces 0.02 (for example)
ORBEON.xforms.Document.setValue(orbeonElId, newValue);
});
我可以看到 Orbeon 发布数据(Firebug),但 XML 实例没有更新(输入不会更新输出 - 即使它们共享相同的“ref”属性)。
最佳答案
我认为您将 html 元素的 id 与 xf:input
元素的 XForms id(id
属性)混淆了。
Orbeon 文档 shows an example :在 ORBEON.xforms.Document.setValue()
函数调用中使用的 id 是(服务器端)XForms 元素的 id。因此,在您的示例中,它是 changeVatTotal
,而不是(客户端)html 输入元素 changeVatTotal$xforms-input-1
的 id。这就是为什么 Firebug 中显示的请求对 XForms 实例没有影响:服务器端 XForms 引擎找不到 id 为 changeVatTotal$xforms- 的
,因此它不知道如何处理该请求。xf:input
元素input-1
这也意味着您(通常)不需要计算目标元素的 id,而只需使用 xf:input 的“普通”XForms id 属性值即可。
或者:
是否可以在 XForms 中完全处理“加号”按钮?您可以使用 xforms:trigger
control并包括 xforms:setvalue
对 DOMActivate
事件执行的操作:
<xf:trigger>
<xf:label>+</xf:label>
<xf:setvalue
ev:event="DOMActivate"
ref="instance('submitted_instance')/TotVATAmnt"
value="0.01 + instance('submitted_instance')/TotVATAmnt" />
<.... more actions ...>
</xf:trigger>
我认为这个解决方案比在客户端和服务器端完成一些工作更稳定。
关于javascript - 在 XForms 中,使用 Orbeon,如何通过 jQuery 更新 XML 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10548695/