Обратитесь к внешнему экземпляру из компонента XBL в Orbeon

Я делаю свой собственный компонент, и в нем я хочу установить значение внешнего экземпляра. Например, моя основная форма имеет:

<xf:model id="fr-form-model" xxf:expose-xpath-types="true">
    <!-- Main instance -->
    <xf:instance id="fr-form-instance">
        <form>
            <section-1>
                <myControl/>
            </section-1>
        </form>
    </xf:instance>
    ...

и внутри myControl.xbl Я имею:

<xf:setvalue
  model="fr-form-model"
  ref="instance('fr-form-instance')/form/section-1/myControl"
  value="'myValue'" /> 

но к сожалению это не видит fr-form-model ("Ссылка на несуществующий идентификатор модели: fr-form-model"), что понятно, потому что компонент инкапсулирован и не может видеть внешние элементы. Как я могу сослаться на внешний экземпляр?

1 ответ

Решение

Вы можете написать в контрольную привязку с помощью xxf:binding() (см. также суть):

<xh:html
        xmlns:xh="http://www.w3.org/1999/xhtml"
        xmlns:xf="http://www.w3.org/2002/xforms"
        xmlns:xxf="http://orbeon.org/oxf/xml/xforms"
        xmlns:fr="http://orbeon.org/oxf/xml/form-runner">
    <xh:head>
        <xf:model>
            <xf:instance>
                <value/>
            </xf:instance>
        </xf:model>
        <xbl:xbl xmlns:xbl="http://www.w3.org/ns/xbl" xmlns:xxbl="http://orbeon.org/oxf/xml/xbl">
            <xbl:binding id="fr-gaga" element="fr|gaga" xxbl:mode="binding">
                <xbl:template>
                    <xf:trigger>
                        <xf:label>Set value</xf:label>
                        <xf:setvalue event="DOMActivate" ref="xxf:binding('fr-gaga')" value="42"/>
                    </xf:trigger>
                </xbl:template>
            </xbl:binding>
        </xbl:xbl>
    </xh:head>
    <xh:body>
        <fr:gaga ref="instance()"/>
        <xf:output value="instance()"/>
    </xh:body>
</xh:html>

В противном случае, быстрый и грязный способ заключается в использовании xxf:instance() функция вместо Он имеет видимость через границы компонентов XBL. Но мы не рекомендуем это, поскольку это нарушает инкапсуляцию.

Смотрите также ответ этого форума.

Другие вопросы по тегам