0

我正在尝试创建一个自定义组件,当它在表单构建器中实例化时,它将在 fr-form-instance 中包含一个包含子节点的节点,而不仅仅是教程中所示的单个节点: http ://wiki.orbeon.com /forms/doc/developer-guide/xbl-components-guide#TOC-Event-handling

例如,如果我在 form-b​​uilder 中实例化教程输入组件:

.....

    <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> 
.....

是否有可能做到这一点?是否存在与此类似的其他组件/示例?

4

1 回答 1

1

部分模板做类似的事情:

  • 插入节模板时,Form Builder 仅插入一个元素
  • 部分模板组件在运行时变得可见时插入其嵌套元素

您可以看到这是如何在form-to-xbl.xsl.

类似地,这里是一个XBL 组件的原型,它在缺少元素时创建一个元素。

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

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

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

部分模板通过验证 XBL 组件本身中的子实例来解决此问题。

于 2012-05-15T01:39:53.853 回答