我在Orbeon 2017.1中遇到了一个小故障,它没有出现在2015年末/ 2016年初的软件版本中:在xforms中添加某些元素时出现错误弹出:实例
Exception in client-side code.
Message: l is undefined
File: http://localhost:8080/orbeon/xforms-server/orbeon-266479e766510e28f420e559b3a49c43f8b18400.js
Line number: 79
经过几个小时的测试后,我将其缩小到以下范围。当xxforms:对话框出现在重复节点(xforms:repeat)中,并且添加了新元素时,会发生错误。请注意,如果xforms-ready已存在该元素,则不会发生错误。总结一下我的问题,我有一个通用的XBL组件,它将显示一个xxforms:可以编辑的属性对话框,这是通过读取XSD动态得出的。对于几乎任何元素,此对话框可以出现在XForms应用程序中的许多位置。如果XBL不可重复的元素(但由DOMActivate添加),则没有错误。仅限于xforms:repeat。
<head>
<xforms:model>
<xforms:instance id="test">
<model xmlns="http://null">
<element1/>
</model>
</xforms:instance>
<xforms:instance id="element2-template">
<element2 xmlns="http://null"/>
</xforms:instance>
<xforms:instance id="element1-template">
<element1 xmlns="http://null"/>
</xforms:instance>
</xforms:model>
<xi:include href="dialog.xbl" xxi:omit-xml-base="true"/>
</head>
<body>
<h1>Test</h1>
<xforms:group ref="instance('test')">
<div>
<xforms:trigger appearance="minimal">
<xforms:label>Insert Element1</xforms:label>
<xforms:insert ev:event="DOMActivate" context="." nodeset="./child::node()[last()]" origin="instance('element1-template')"/>
</xforms:trigger>
<xforms:trigger appearance="minimal">
<xforms:label>Insert Element2</xforms:label>
<xforms:insert ev:event="DOMActivate" context="." nodeset="./child::node()[last()]" origin="instance('element2-template')"/>
</xforms:trigger>
</div>
<div>
<!-- this works:
<div>
<xforms:input ref="my:element1">
<xforms:label>Element1</xforms:label>
</xforms:input>
</div>
<my:dialog/>-->
<xforms:repeat nodeset="my:element1">
<div>
<xforms:input ref=".">
<xforms:label>Element1</xforms:label>
</xforms:input>
</div>
<!-- dialog does not work within newly added elements in a repeat on this level -->
<my:dialog/>
</xforms:repeat>
<hr/>
</div>
<!-- this works: insert element 2 after xforms-ready -->
<xforms:group ref="my:element2">
<div>
<xforms:input ref=".">
<xforms:label>Element1</xforms:label>
</xforms:input>
</div>
<my:dialog/>
</xforms:group>
</xforms:group>
</body>
这是XBL:
<xbl:xbl xmlns="http://www.w3.org/1999/xhtml" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:ev="http://www.w3.org/2001/xml-events"
xmlns:xxf="http://orbeon.org/oxf/xml/xforms" xmlns:xbl="http://www.w3.org/ns/xbl" xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fr="http://orbeon.org/oxf/xml/form-runner" xmlns:my="http://null">
<xbl:binding id="my-dialog" element="my|dialog">
<xbl:template>
<xforms:group xbl:attr="model context ref bind" xxbl:scope="outer">
<xbl:content includes="xforms|label,xforms|help,xforms|hint,xforms|alert"/>
<xforms:group xxbl:scope="inner">
<xforms:var name="binding" as="node()?">
<xxf:sequence select="." xxbl:scope="outer"/>
</xforms:var>
<div>
Iside the XBL:
<xforms:trigger appearance="minimal">
<xforms:label>Click for dialog</xforms:label>
<xforms:action ev:event="DOMActivate">
<xxf:show dialog="element-attributes"/>
</xforms:action>
</xforms:trigger>
</div>
<xxf:dialog id="element-attributes" appearance="full" level="modal" close="true" draggable="true" visible="false">
<xforms:label>Dialog</xforms:label>
<div>Here's the dialog text</div>
</xxf:dialog>
</xforms:group>
</xforms:group>
</xbl:template>
</xbl:binding>
</xbl:xbl>
此表单将加载而不会出错。您可以点击&#34;点击进入对话框&#34;触发XBL部分以显示xxforms:对话框,因为element1已经在模型中。但是,如果单击触发器以添加另一个element1,则客户端代码中将出现错误对话框。如果单击触发器添加element2,则没有错误,因为element2不可重复。因此,您可以单击&#34;单击以查看对话框&#34;在element2和xxforms:对话框中将出现。
是否有针对此的解决方法,或者这是当前版本的Orbeon中的错误?它确实在我2017年早些时候运行的版本中运行。
答案 0 :(得分:0)
实际上,您报告的问题确实存在于Orbeon Forms 2017.2(可能是早期版本)中。 This issue现已修复,修复程序将包括2018.1及后续版本以及2017.2.1。