XForms/重复中的绑定
外观
< XForms
您有一个项目列表,并且想要一种简单的方法有条件地显示重复组中的字段。
我们将通过两种方式来做到这一点。首先,我们将在模型中使用绑定表达式。第二种方法是使用带有 ref 属性的组元素。
<data xmlns="">
<group>
<code>yes</code>
<field>display 1</field>
</group>
<group>
<code>no</code>
<field>display 2</field>
</group>
<group>
<code>yes</code>
<field>display 3</field>
</group>
</data>
<xf:repeat nodeset="instance('my-data')/group" id="my-repeat">
<fieldset>
<legend>
Group # <xf:output value="count(preceding-sibling::*) +1"></xf:output>
</legend>
<xf:select1 ref="code">
<xf:label>Display Input Field: </xf:label>
<xf:item>
<xf:label>Yes</xf:label>
<xf:value>yes</xf:value>
</xf:item>
<xf:item>
<xf:label>No</xf:label>
<xf:value>no</xf:value>
</xf:item>
</xf:select1>
<xf:input ref="field" >
<xf:label>Conditional Display: </xf:label>
</xf:input>
</fieldset>
</xf:repeat>
在这个例子中,我们使用一个相对语句来表明该字段应该只在代码值为“yes”时显示。请注意,相关表达式的**上下文**是每个节点集项的结果。
<xf:bind id="field"
nodeset="instance('my-data')/group/field"
relevant="../code = 'yes'"/>
我们可以使用 ref 属性有条件地显示重复中的任何字段。我们通过在组 ref 属性的开头添加“.”来实现这一点,以赋予它当前上下文。然后我们添加一个谓词来打开或关闭整个组。在这种情况下,如果代码是“yes”,则将显示输入字段。如果不是,则该字段将隐藏。
<xf:group ref=".[code='yes']">
<xf:input ref="field">
<xf:label>Conditional Display: </xf:label>
</xf:input>
</xf:group>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xf="http://www.w3.org/2002/xforms">
<head>
<title>Binds in Repeats</title>
<style type="text/css">
@namespace xf url("http://www.w3.org/2002/xforms");
body {{
font-family:Helvetica, sans-serif;
}}</style>
<xf:model>
<xf:instance id="my-data">
<data xmlns="">
<group>
<code>yes</code>
<field>display 1</field>
</group>
<group>
<code>no</code>
<field>display 2</field>
</group>
<group>
<code>yes</code>
<field>display 3</field>
</group>
<group>
<code>no</code>
<field>display 4</field>
</group>
</data>
</xf:instance>
<xf:bind id="field"
nodeset="instance('my-data')/group/field"
relevant="../code = 'yes'"/>
</xf:model>
</head>
<body>
<h1>Test of binding rules within a repeat</h1>
<xf:repeat nodeset="instance('my-data')/group" id="my-repeat">
<fieldset>
<legend>
Group # <xf:output value="count(preceding-sibling::*) +1"></xf:output>
</legend>
<xf:select1 ref="code">
<xf:label>Display Input Field: </xf:label>
<xf:item>
<xf:label>Yes</xf:label>
<xf:value>yes</xf:value>
</xf:item>
<xf:item>
<xf:label>No</xf:label>
<xf:value>no</xf:value>
</xf:item>
</xf:select1>
<xf:input ref="field" >
<xf:label>Conditional Display: </xf:label>
</xf:input>
</fieldset>
</xf:repeat>
<xf:output value="index('my-repeat')">
<xf:label>Current Selected Group: </xf:label>
</xf:output>
</body>
</html>