1

在我的表单文件中,我有一个load-data-submission从数据库中获取一些数据的提交,它在 xforms-ready 上调用:

<xf:model>
...
<xf:action ev:event="xforms-ready" ev:observer="fr-form-model" if="true()">                     
     <xf:send submission="load-data-submission"/>                
 </xf:action>
...
</xf:model>

现在,我有一个以相同形式使用的 XBL 控件。还有另一个提交也获取数据等,我们称之为rest-submission。现在,我希望在我的(内部表单文件)获取数据rest-submission之后立即调用(XBL 内部的那个)。load-data-submission

我该怎么做?我试过放入 XBL

<xf:action ev:observer="load-data-submission"  ev:event="xforms-submit-done">
    <xf:send submission="rest-submission"/> 
</xf:action>

没有运气。

提前致谢。

4

1 回答 1

0

为了避免 id 冲突并启用封装,XBL 为 id 定义了一个新的词法范围和一个新的 XPath 上下文。因此,如果您从 XBL 内部引用 id load-data-submission,这指的是XBL 中load-data-submission定义,在您的情况下很可能不存在。要在 XBL 之外引用 id,您需要使用属性更改范围。xxbl:scope="outer"以下示例说明了如何执行此操作:

<xh:html xmlns:xh="http://www.w3.org/1999/xhtml"
      xmlns:xf="http://www.w3.org/2002/xforms"
      xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:xbl="http://www.w3.org/ns/xbl"
      xmlns:xxbl="http://orbeon.org/oxf/xml/xbl"
      xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
      xmlns:example="http://example.com/">
    <xh:head>
        <xf:model>
            <xf:submission
                    id="get-states"
                    method="get"
                    resource="/xforms-sandbox/service/zip-states"
                    replace="instance"
                    instance="states"/>
            <xf:instance id="states">
                <empty/>
            </xf:instance>
        </xf:model>
        <xbl:xbl>
            <xbl:binding element="example|simple">
                <xbl:implementation>
                    <xf:model id="simple-model">
                        <xf:instance>
                            <internal/>
                        </xf:instance>
                    </xf:model>
                </xbl:implementation>
                <xbl:template>
                    <xf:group>
                        <xf:message ev:observer="get-states"
                                    ev:event="xforms-submit-done"
                                    xxbl:scope="outer"
                                    value="'Got event'"/>
                    </xf:group>
                </xbl:template>
            </xbl:binding>
        </xbl:xbl>
    </xh:head>
    <xh:body>
        <example:simple/>
        <xf:trigger>
            <xf:label>Get states</xf:label>
            <xf:send submission="get-states" ev:event="DOMActivate"/>
        </xf:trigger>
    </xh:body>
</xh:html>
于 2015-01-10T01:22:52.153 回答