0

我正在尝试将我的 orbeon 升级为使用新的orbeon 4.2switch case但是我在源代码中使用的那个有问题。尝试切换外壳时遇到问题。

<xforms:action ev:event="xxforms-invalid" ev:observer="main">
            <xforms:toggle case="invalid-form-case" if="instance('main')/current_session/student_module_regn_status = 'Close'"/>
        </xforms:action>
        <xforms:action ev:event="xxforms-valid" ev:observer="main">
            <xforms:toggle case="valid-form-case" if="instance('main')/current_session/student_module_regn_status = 'Open'"/>
        </xforms:action>

以下是开关盒的代码:

<xforms:switch>
<xforms:case id="invalid-form-case">
    Closed
</xforms:case>
<xforms:case id="valid-form-case">
    Open
</xforms:case>

谢谢

这是一个可以重现该问题的示例:

    <html xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xforms="http://www.w3.org/2002/xforms"
    xmlns:xhtml="http://www.w3.org/1999/xhtml"
    xmlns:ev="http://www.w3.org/2001/xml-events"
    xmlns:xi="http://www.w3.org/2001/XInclude"
    xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
    xmlns:widget="http://orbeon.org/oxf/xml/widget"
    xmlns:xdt="http://www.w3.org/2005/02/xpath-datatypes"
    xmlns:f="http://orbeon.org/oxf/xml/formatting"
    xmlns="http://www.w3.org/1999/xhtml">

<head>
    <title>test</title>
    <xhtml:link rel="stylesheet" href="/apps/uis-common/css/app-form.css" type="text/css"/>
    <xforms:model>
        <xforms:instance id="main">
            <mains>
                <test1>Open</test1>
            </mains>
        </xforms:instance>

        <xforms:action ev:event="xxforms-invalid" ev:observer="main">
            <xforms:toggle case="invalid-form-case" if="instance('main')/test1 = 'Close'"/>
        </xforms:action>

        <xforms:action ev:event="xxforms-valid" ev:observer="main">
            <xforms:toggle case="valid-form-case" if="instance('main')/test1 = 'Open'"/>
        </xforms:action>
    </xforms:model>
</head>

<body dir="ltr">
    <div>
        <table width="100%" id="wrapper" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td>
                    <xforms:switch>
                        <xforms:case id="invalid-form-case">
                            CLOSE
                        </xforms:case>
                        <xforms:case id="valid-form-case">
                            OPEN
                        </xforms:case>
                    </xforms:switch>
                </td>
            </tr>
        </table>
    </div>
</body>
</html>

它假设显示“打开”,因为“test1”是打开的,但无论“test1”是什么,它只显示“关闭”

4

1 回答 1

0

变更原因如下:

在以前的版本中,调度到的xxforms-validxxforms-invalid事件xforms:instance在每次重新验证期间调度。如兼容性说明中所述,在最近的版本中,此行为已更改。

根据 XForms 处理模型,在 XForms 初始化时,将完成以下操作:

  • 创建模型和实例
  • 初始重新计算和重新验证
  • 创建控制树

在您的示例中,在创建控件树之前xxforms-valid调度了第一个或xxforms-invalid事件。这意味着您的事件处理程序找不到要切换的控件。在 4.0 之前,您可能会在控件树创建之后或之后至少获得一次调度,因此切换将起作用。xxforms-validxxforms-invalid

更好的解决方法可能是做这样的事情:

<xf:toggle
  ev:event="xforms-ready"
  if="xxf:valid(instance('main'), true())"
  case="...">
于 2013-06-21T16:58:33.033 回答