我正在尝试使用添加按钮在飞行/运行时添加一个重复元素。当我单击添加按钮时,我收到错误 “函数索引使用重复ID'employee-repeat',它不在范围内”。我不确定我是否在表格中正确引用重复元素。这是完整的x from。
`<xhtml:html xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
xmlns:saxon="http://saxon.sf.net/"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xxi="http://orbeon.org/oxf/xml/xinclude"
xmlns:sql="http://orbeon.org/oxf/xml/sql"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:exforms="http://www.exforms.org/exf/1-0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:fr="http://orbeon.org/oxf/xml/form-runner"
xmlns:ev="http://www.w3.org/2001/xml-events">
<xhtml:head>
<xhtml:title>U Form</xhtml:title>
<xforms:model id="fr-form-model">
<xforms:instance id="fr-form-instance">
<form>
<section-1>
<hello/>
</section-1>
</form>
</xforms:instance>
<xforms:bind id="fr-form-binds" nodeset="instance('fr-form-instance')">
<xforms:bind id="section-1-bind" nodeset="section-1">
<xforms:bind id="hello-bind" nodeset="hello" name="hello"/>
</xforms:bind>
</xforms:bind>
<xforms:instance id="fr-form-metadata" xxforms:readonly="true">
<metadata>
<application-name>gvhd</application-name>
<form-name>test</form-name>
<title xml:lang="en">Untitled Form</title>
<description xml:lang="en"/>
<author/>
<logo mediatype="" filename="" size=""/>
</metadata>
</xforms:instance>
<xforms:instance id="fr-form-attachments">
<attachments>
<css mediatype="text/css" filename="" size=""/>
<pdf mediatype="application/pdf" filename="" size=""/>
</attachments>
</xforms:instance>
<xforms:instance id="fr-form-resources" xxforms:readonly="true">
<resources>
<resource xml:lang="en">
<section-1>
<label>Section1</label>
<help/>
</section-1>
<hello>
<label>hello</label>
<hint/>
<help/>
<alert/>
</hello>
</resource>
</resources>
</xforms:instance>
<xforms:instance id="employees-instance">
<employees>
<employee>
<first-name>Alice</first-name>
</employee>
<employee>
<first-name>Bob</first-name>
</employee>
<employee>
<first-name>Marie</first-name>
</employee>
</employees>
</xforms:instance>
<xforms:instance id="fr-service-request-instance" xxforms:exclude-result-prefixes="#all">
<request/>
</xforms:instance>
<xforms:instance id="fr-service-response-instance" xxforms:exclude-result-prefixes="#all">
<response/>
</xforms:instance>
</xforms:model>
</xhtml:head>
<xhtml:body>
<fr:view>
<xforms:label ref="instance('fr-form-metadata')/title"/>
<fr:body>
<fr:section id="section-1-section" bind="section-1-bind">
<xforms:label ref="$form-resources/section-1/label"/>
<xforms:help ref="$form-resources/section-1/help"/>
<fr:grid columns="2">
<xforms:repeat nodeset="instance('employees-instance')/employee" id="employee-repeat">
<xhtml:tr>
<xhtml:td>
<xforms:output ref="first-name"/>
</xhtml:td>
<xhtml:td>
<xforms:output ref="first-name"/>
</xhtml:td>
</xhtml:tr>
</xforms:repeat>
<xhtml:tr>
<xhtml:td>
<xforms:input bind="hello-bind" id="hello-control">
<xforms:label ref="$form-resources/hello/label"/>
<xforms:hint ref="$form-resources/hello/hint"/>
<xforms:help ref="$form-resources/hello/help"/>
<xforms:alert ref="$fr-resources/detail/labels/alert"/>
</xforms:input>
</xhtml:td>
<xhtml:td/>
</xhtml:tr>
<xhtml:tr>
<xhtml:td>
<xforms:trigger>
<xforms:label>Add</xforms:label>
<xforms:insert ev:event="DOMActivate" context="instance('fr-form-instance')" nodeset="instance('employees-instance')/employee" at="index('employee-repeat')"
position="after"/>
</xforms:trigger>
</xhtml:td>
<xhtml:td/>
</xhtml:tr>
</fr:grid>
</fr:section>
</fr:body>
</fr:view>
</xhtml:body>
`
答案 0 :(得分:0)
我在Orbeon Sandbox中运行此代码,无法重现上述错误。我没有与未声明的变量相关的错误,一旦我声明了变量,表格正常呈现,我就能够添加新行。
但是,从技术上讲,我看到你在重复循环之外的Add触发器中使用重复索引index('employee-repeat')
,因此你可能遇到了这个错误。为了更好地帮助,请告诉我您如何运行表单。
更新:根据OP评论,这是更新。
很容易纠正它。您不应该使用index('employee-repeat')
。
如果您想在上次使用中添加新行at=last()
或
如果您想在第一次使用at=1
或
Add
链接以及每行中的Add
链接
{{1}}链接可在所需位置添加新行。答案 1 :(得分:0)
您的示例似乎与最新的Orbeon Forms代码一起使用。它运行没有错误,按下添加按钮时会添加“Marie Marie”。您是否尝试使用Orbeon Forms 4.0 M10?
(请注意,4.0 M10是里程碑版本,这还不是4.0最终版本。)
答案 2 :(得分:0)
根据原始XF 1.1建议,Kaipa M Sarma声明是正确的,一旦你决定在重复控制之外使用触发按钮,请提及相应的索引,如last()或index = 1。否则,如果你需要插入中间或任何位置你决定在重复内使用按钮..