Pour quels composants le xxforms-iteration-moved
est distribué est une question de la façon dont xxforms-iteration-moved
est défini. À l'heure actuelle, il est envoyé aux contrôles à l'intérieur des itérations qui ont été déplacées. Ce dont vous avez besoin est de gérer l'événement xforms-enabled
, en plus de xxforms-iteration-moved
. Considérons l'exemple suivant: vous commencez avec une liste avec "a, c, d". Si vous insérez "b" après "a", le nouveau "b" reçoit un xforms-enabled
et "c, d" un xxforms-iteration-moved
. Donc, en réagissant aux deux événements, vous devriez pouvoir (ré) initialiser votre composant si nécessaire.
<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>
Je dois ajouter que si vous attendez votre composant à utiliser dans une répétition (et, tôt ou tard, chaque composant est), en ce moment, en raison de la façon dont les répétitions fonctionnent sur le côté client, si vous faites un peu travailler pour initialiser le composant sur xforms-enabled
, vous avez probablement besoin de faire cela aussi sur xxforms-iteration-moved
. Par exemple, voir how this is done dans le composant fr:button
.
Quel processeur XForms utilisez-vous? –