1

RESTXQ サーバーで eXist 2.2 の XSLTForms を使用しています。

ユーザーがリモート API にクエリを実行できる検索フォームがあります。クエリが一致した場合、リモート API は一連の XML レコードで応答します。私はxf:repeatレコードを反復処理するために使用しています。ユーザーが必要なレコードを選択できるように、各レコードの先頭にチェックボックスを提供できるようにしたいと考えています。ただし、チェックボックス要素をxf:repeat(xf:inputブール値にバインドして) 内部に配置すると、必要な機能が得られません。チェックボックスは互いに独立しているのではなく、グループとしてアクティブ化されます。最初のボックスをクリックすると、2 番目のボックスもアクティブになります。これは十分に一般的な使用例のようですが、実装方法を示すドキュメントや例が見つからないようです。

bool各チェックボックスに新しい要素があることを確認するために、2 つのインスタンスを何らかの形で同期する必要があることはわかっていxf:insertます。

モデル スニペット:

<xf:instance xmlns="" id="default">
    <results>            
        <sru:record sru:test="false">
            <sru:recordData>
                <marc:record>
                ...
                </marc:record>
            </sru:recordData>
        </sru:record>
        <sru:record sru:test="false">
            <sru:recordData>
                <marc:record>
                ...
                </marc:record>
            </sru:recordData>
        </sru:record>                
    </results>
</xf:instance>

<xf:bind nodeset="instance('default')/sru:record/@sru:test" id="checkVal" type="xs:boolean"/>

フォーム スニペットxf:repeat:

<div>
    <xf:repeat 
    nodeset="instance('default')/sru:record/sru:recordData/marc:record" 
    id="marc-repeat" appearance="full">
        <div class="checkbox">
            <xf:input incremental="true" ref="../../@sru:test">
                <xf:label>Select</xf:label>      
                <xf:action ev:event="DOMActivate">                                    
                    <xf:setvalue 
                    bind="checkVal" 
                    if=". = boolean-from-string('false')">true</xf:setvalue>
                    <xf:setvalue 
                    bind="checkVal" 
                    if=". = boolean-from-string('true')">false</xf:setvalue>    
                </xf:action>                           
            </xf:input>
        </div>
        ...
    </xf:repeat>
</div>
4

2 に答える 2

4

XForms では、同じノードを多くのコントロールにバインドすることができ、その結果、これらのコントロールはすべて更新時に同期されます。

あなたの例では、個別のインスタンスに off 要素が 1 つだけあります。繰り返し内で入力コントロールがこの要素にバインドされている場合、XForms エンジンは、繰り返しノード セット内のノードと同じ数の同一のコントロールをレンダリングします。

レコードをチェックしたいと思います。これには、たとえば、各レコード内に専用の属性が必要です。これは XForms アクションで実行できます。レコード インスタンスがサーバーから取得されるたびに、関連付けられたアクションがそのような属性を挿入できます。eXistdb を使用すると、この追加の属性を使用してレコード インスタンスを生成するようにサーバーに依頼する方が簡単な場合があります。

于 2015-02-09T07:10:45.180 に答える