表单生成器中的orbeon自定义xbl组件

时间:2012-05-14 13:54:26

标签: 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> 
.....

有可能这样做吗?其他组件/示例中是否存在与此类似的行为?

1 个答案:

答案 0 :(得分:1)

剖面模板做类似的事情:

  • 插入节模板时,表单生成器仅插入一个元素
  • 节模板组件,在运行时,变为可见时,插入其嵌套元素

您可以在form-to-xbl.xsl中看到这是如何完成的。

类似地,here is a prototype用于创建缺少的元素的XBL组件。

现在魔鬼在细节中。你必须特别确定:

  • 组件创建嵌套元素时
  • 是否删除它们

另外,要记住的一件事是XBL组件本身不能验证嵌套元素。只有表单生成器生成绑定的顶级元素才能验证数据。

剖面模板通过验证XBL组件本身内的子实例来解决这个问题。