4

javascript でチェックボックス コントロールを作成する XBL コンポーネントがあります。コンポーネントの初期化中に値が JavaScript で設定されます。コンポーネントは、repeat 内で使用しない場合はうまく機能しますが、repeat 内で行を上下に移動しようとすると、XBL コントロールが状態を変更しません。

xxforms-iteration-moved イベントは、移動された行で発生しますが、この移動中に位置が変わる行では発生しません。たとえば、行 3 を行 2 に移動すると、行 3 で xxforms-iteration-moved が実行されますが、行 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" は anxforms-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 に答える