我正在尝试创建一个自定义组件,当在表单构建器中实例化时,它将在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>
.....
有可能这样做吗?其他组件/示例中是否存在与此类似的行为?
答案 0 :(得分:1)
剖面模板做类似的事情:
您可以在form-to-xbl.xsl
中看到这是如何完成的。
类似地,here is a prototype用于创建缺少的元素的XBL组件。
现在魔鬼在细节中。你必须特别确定:
另外,要记住的一件事是XBL组件本身不能验证嵌套元素。只有表单生成器生成绑定的顶级元素才能验证数据。
剖面模板通过验证XBL组件本身内的子实例来解决这个问题。