我在 eXist 2.2 中使用 XSLTForms 和 RESTXQ 服务器。
我有一个搜索表单,让用户可以查询远程 API,如果查询匹配,该 API 会响应一组 XML 记录。我xf:repeat
用来迭代记录,并且我希望能够在每条记录的开头提供一个复选框,以便用户可以选择他们想要的记录。但是,当我在其中放置一个复选框元素xf:repeat
(使用xf:input
绑定到布尔值)时,我没有获得所需的功能。复选框不是相互独立,而是作为一个组激活。当我单击第一个框时,第二个框也会被激活,依此类推。这似乎是一个足够常见的用例,但我似乎找不到任何文档或示例来说明如何实现它。
我知道我需要以某种方式同步这两个实例,以确保bool
每个复选框都有一个新元素,并且我尝试了不同的方法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>