当xxforms:dialog在xforms:repeat中时,客户端代码中的异常

问题描述 投票:0回答:1

我在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:重复。

<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>

此表单将加载没有错误。您可以单击XBL部分中的“单击以查看对话框”触发器以显示xxforms:对话框,因为element1已在模型中。但是,如果单击触发器以添加另一个element1,则客户端代码中将出现错误对话框。如果单击触发器以添加element2,则没有错误,因为element2不可重复。因此,您可以单击element2中的“单击以查看对话框”,将出现xxforms:对话框。

是否有解决方法,或者这是当前版本的Orbeon中的错误?它确实在我2017年早些时候运行的版本中运行。

orbeon xforms
1个回答
0
投票

实际上,您报告的问题确实存在于Orbeon Forms 2017.2(可能是早期版本)中。 This issue现已修复,修复程序将包括2018.1及后续版本以及2017.2.1。

© www.soinside.com 2019 - 2024. All rights reserved.