4

我有一个 XBL 组件,它在 javascript 中创建一个复选框控件。在组件初始化期间在 javascript 中设置值。组件在没有在重复内部使用时运行良好,但在我尝试向上或向下移动行时在重复内部使用 XBL 控件不会更改状态。

xxforms-iteration-moved 事件在移动的行上触发,但不会在移动期间改变位置的行上触发。例如,如果我将第 3 行移动到第 2 行,那么 xxforms-iteration-moved 在第 3 行被触发,但我想重新初始化第 2 行中的组件,并且我的状态保存在 javascript 中。

我认为 xxforms-iteration-moved 应该在改变位置的两行上触发?这实际上是涉及两行的交换。请给出意见。

编辑:我正在使用 Orbeon Form Runner

4

1 回答 1

1

xxforms-iteration-moved分派到哪些组件取决于如何xxforms-iteration-moved定义。现在,它被分派到移动的迭代内部的控件。xforms-enabled除了xxforms-iteration-moved. _ 考虑以下示例:您从一个带有“a、c、d”的列表开始。如果在“a”之后插入“b”,那么新的“b”会得到 an xforms-enabled,“c, d”会得到 a xxforms-iteration-moved。因此,通过对这两个事件做出反应,您应该能够根据需要(重新)初始化您的组件。

<xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
      xmlns:xforms="http://www.w3.org/2002/xforms"
      xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
      xmlns:ev="http://www.w3.org/2001/xml-events"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
    <xhtml:head>
        <xhtml:title>Iteration moved</xhtml:title>
        <xforms:model>
            <xforms:instance>
                <instance>
                    <letter>a</letter>
                    <letter>c</letter>
                    <letter>d</letter>
                    <letter>e</letter>
                </instance>
            </xforms:instance>
        </xforms:model>
    </xhtml:head>
    <xhtml:body>
        <fr:button>
            <xforms:label>Insert b</xforms:label>
            <xforms:insert ev:event="DOMActivate" nodeset="letter" at="1" position="after" origin="xxforms:element('letter', 'b')"/>
        </fr:button>
        <fr:button>
            <xforms:label>Delete c</xforms:label>
            <xforms:delete ev:event="DOMActivate" nodeset="letter[. = 'c']"/>
        </fr:button>
        <xforms:repeat id="letter-repeat" nodeset="letter">
            <xforms:output id="letter" value=".">
                <xforms:message ev:event="xxforms-iteration-moved" level="modal" value="concat('xxforms-iteration-moved : ', .)"/>
                <xforms:message ev:event="xforms-enabled" level="modal" value="concat('xforms-enabled : ', .)"/>
            </xforms:output>
        </xforms:repeat>
    </xhtml:body>
</xhtml:html>

我应该补充一点,如果你希望你的组件被重复使用(迟早每个组件都是),现在,因为重复在客户端是如何工作的,如果你正在做一些工作来初始化组件xforms-enabled,您很可能也需要在xxforms-iteration-moved. 例如,看看这是如何fr:button组件中完成的。

于 2010-11-02T22:19:44.507 回答