0

追加ボタンを使用して、実行時に繰り返し要素を 1 つ追加しようとしています。追加ボタンをクリックすると、「関数インデックスは範囲外の繰り返し ID 'employee-repeat' を使用しています」というエラーが表示されます。フォーム内で繰り返し要素を適切に参照しているかどうかわかりません。ここに からの完全な x があります。

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

`

4

3 に答える 3

0

このコードを Orbeon Sandbox で実行しましたが、前述のエラーを再現できませんでした。宣言されていない変数に関連するエラーはほとんどありませんでした。変数を宣言すると、フォームが正常にレンダリングされ、新しい行を追加できました。

index('employee-repeat')ただし、技術的には、繰り返しループの外側にある追加トリガーで繰り返しインデックスを使用しているため、そのエラーが発生した可能性があります。より良いサポートを提供するために、フォームの実行方法をお知らせください。

更新: OP コメントに基づいて、ここに更新があります。

それを修正するのは簡単です。を使用しないでくださいindex('employee-repeat')

  1. 最後の使用で新しい行を追加する場合、at=last()または

  2. 初回使用時に追加したい場合at=1

  3. 中央(目的の位置)に追加する場合は、Addリンクを繰り返し内に移動し、行ごとに Add、目的の位置に新しい行を追加するためのリンクがあります。
于 2012-09-18T09:08:33.580 に答える
0

あなたの例は、最新の Orbeon Forms コードでうまく動作するようです。エラーなく実行され、[追加] ボタンを押すと「Marie Marie」が追加されます。Orbeon Forms 4.0 M10でこれを試しましたか?

(4.0 M10 はマイルストーン ビルドであり、まだ 4.0 の最終リリースではないことに注意してください。)

于 2012-09-19T06:29:14.317 に答える
0

元の XF 1.1 推奨事項 mr Kaipa M Sarma ステートメントは正しいため、繰り返しコントロールの外側でトリガー ボタンを使用することに決めたら、 last() や index = 1 などの対応するインデックスに言及します。それ以外の場合は、途中または任意の場所に挿入する必要がある場合は、リピート内のボタンを使用することを決定します..

于 2012-09-20T06:50:34.713 に答える