Повторная инициализация компонента XBL в xxforms-iteration-Move - PullRequest
4 голосов
/ 02 ноября 2010

У меня есть компонент XBL, который создает элемент управления флажок в JavaScript.Значение устанавливается в javascript во время инициализации компонента.Компонент работает хорошо, когда не используется внутри повторения, но внутри повторения, когда я пытаюсь переместить строки вверх или вниз, элемент управления XBL не меняет состояние.не стреляет по ряду, который меняет положение во время этого хода.Например, если я переместил строку 3 в строку 2, то xxforms-iteration-move запускается в строке 3, но я хочу повторно инициализировать компоненты в строке 2, а мое состояние сохраняется в javascript.-iration-move должен быть запущен в обоих рядах, которые изменили положение?Это действительно своп, который включает в себя обе строки.Пожалуйста, прокомментируйте.

Редактировать: Я использую Orbeon Form Runner

1 Ответ

1 голос
/ 03 ноября 2010

На какие компоненты отправляется xxforms-iteration-moved, зависит от того, как определяется xxforms-iteration-moved.Прямо сейчас, это отправлено к элементам управления в итерациях, которые переместились.Вам может понадобиться обработать событие xforms-enabled в дополнение к xxforms-iteration-moved.Рассмотрим следующий пример: вы начинаете со списка «a, c, d».Если вы вставите «b» после «a», то новые «b» получат 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.

...