0

私は独自のコンポーネントを作成しており、その中に外部インスタンスの値を設定したいと考えています。たとえば、私のメインフォームには次のものがあります。

<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、コンポーネントはカプセル化されており、外部要素を表示できないため、理解できる ("存在しないモデル ID への参照: fr-form-model") は表示されません。外部インスタンスを参照するにはどうすればよいですか?

4

1 に答える 1

1

次のようにコントロール バインディングに書き込むことができますxxf:binding()( gistも参照)。

<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 コンポーネントの境界を介して可視性があります。ただし、カプセル化が壊れるため、お勧めしません。

このフォーラムの回答も参照してください。

于 2014-05-01T21:49:17.080 に答える