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>