がどのコンポーネントに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