Обратитесь к внешнему экземпляру из компонента 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. Но мы не рекомендуем это, поскольку это нарушает инкапсуляцию.
Смотрите также ответ этого форума.