2014-04-28 11 views
0

내 구성 요소를 만들고 그 안에 내 외부 인스턴스 값을 설정하려고합니다.Orbeon의 XBL 구성 요소에서 외부 인스턴스 참조

<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-형상 - 모델 "이라고도 함) 이해하기 쉽습니다. 구성 요소가 캡슐화되어 외부 요소를 볼 수 없기 때문입니다. 바깥 쪽 인스턴스를 어떻게 참조 할 수 있습니까?

답변

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 구성 요소의 경계를 통해 가시성을 확보 할 수 있습니다. 그러나 캡슐화가 중단되면서 권장하지 않습니다.

도 참조하십시오. this forum answer