Пользовательский компонент xbl orbeon в конструкторе форм

Я пытаюсь создать пользовательский компонент, который при создании экземпляра в конструкторе форм будет иметь в fr-form-instance узел, содержащий дочерние узлы, а не только один узел, как показано в руководстве: http://wiki.orbeon.com/forms/doc/developer-guide/xbl-components-guide#TOC-Event-handling.

Например, если я создаю компонент ввода учебника в построителе форм:

.....

    <fb:metadata>
        <fb:display-name lang="en">Custom Component</fb:display-name>
        <fb:datatype>xforms:string</fb:datatype>
        <fb:template>
            <cc:test ref=""/>
        </fb:template>
    </fb:metadata>   
    <xbl:binding element="fr|tutorial-input" id="fr-tutorial-input">
        <xbl:template>
            <xforms:group xbl:attr="model context ref bind" xxbl:scope="outer">
                <xbl:content includes="xforms|label,xforms|help,xforms|hint,xforms|alert"/>
                <xforms:group xxbl:scope="inner">
                    <xxforms:variable name="binding" as="node()?">
                        <xxforms:sequence select="." xxbl:scope="outer"/>
                    </xxforms:variable>
                    <xforms:input ref="$binding"/>
                </xforms:group>
            </xforms:group>
        </xbl:template>
    </xbl:binding>

..... 

Конструктор форм будет иметь только один узел в fr-form-instance:

.....
    <xforms:instance id="fr-form-instance">
        <form>
            <section>
                <contorl-x/> //only one node
.....

Что я хотел бы сделать, это иметь:

.....
    <xforms:instance id="fr-form-instance">
        <form>
            <section>
                <contorl-x>// x child nodes 
                    <contorl-x-child-one> 
                    <contorl-x-child-two> 
                       .....
                </contorl-x> 
.....

Можно ли сделать это? Существуют ли другие компоненты/примеры, которые ведут себя аналогично этому?


person Faton    schedule 14.05.2012    source источник


Ответы (1)


Шаблоны разделов делают что-то подобное:

  • при вставке шаблона раздела Form Builder вставляет только один элемент
  • компонент шаблона раздела, во время выполнения, когда становится видимым, вставляет свои вложенные элементы

Вы можете увидеть, как это делается в form-to-xbl.xsl.

Точно так же вот прототип компонента XBL, создающего элемент, если он отсутствует.

Теперь дьявол кроется в деталях. Вы должны определить, в частности:

  • когда компонент создает свои вложенные элементы
  • удаляет ли он их когда-либо

Кроме того, следует иметь в виду, что сам компонент XBL в настоящее время не может проверять вложенные элементы. Только элементы верхнего уровня с привязками, созданными Form Builder, могут проверять данные.

Шаблоны разделов позволяют обойти это, проверяя подэкземпляр внутри самого компонента XBL.

person ebruchez    schedule 15.05.2012