我是XForms的新手,我在尝试找到解决方案时遇到了一些问题,这似乎是一个相对微不足道的问题。我的表单上有一个select1控件,我想将模型中的一个项目绑定到选定的值和控件的选定文本,这样我就可以在提交表单时存储这两个值。
我的模型看起来像这样:
<model>
<valueofselect/>
<textofselect/>
</model>
你们中的一位XForms大师能否发布一个如何实现这一目标的小例子。
非常感谢你。
答案 0 :(得分:2)
有不同的方法可以实现这一目标:
/model/textofselect
节点的值; calculate
property绑定以动态设置/model/textofselect
节点的值。这是一个完整的xforms表格,展示了第二个解决方案。第一种方式看起来相似,最重要的部分(XPath)在两种解决方案中都是相同的。
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:xforms="http://www.w3.org/2002/xforms">
<head>
<title>Select1 - get value and label</title>
<xforms:model id="main-model">
<xforms:instance id="data">
<model xmlns="">
<valueofselect/>
<textofselect/>
</model>
</xforms:instance>
<xforms:instance id="items">
<items xmlns="">
<item>
<label />
<value />
</item>
<item>
<label>label a</label>
<value>value a</value>
</item>
<item>
<label>label b</label>
<value>value b</value>
</item>
<item>
<label>label c</label>
<value>value c</value>
</item>
</items>
</xforms:instance>
<xforms:bind
nodeset="instance('data')/textofselect"
calculate="instance('items')/item[value eq
instance('data')/valueofselect]/label/text()" />
</xforms:model>
</head>
<body>
<h1>Select...</h1>
<xforms:select1 ref="instance('data')/valueofselect">
<xforms:itemset nodeset="instance('items')/item">
<xforms:label ref="label"/>
<xforms:value ref="value"/>
</xforms:itemset>
</xforms:select1>
<h1>Selection result</h1>
<xforms:output ref="instance('data')/valueofselect">
<xforms:label>Selected value: </xforms:label>
</xforms:output><br />
<xforms:output ref="instance('data')/textofselect">
<xforms:label>Selected Value's label: </xforms:label>
</xforms:output>
</body>
</html>
xforms:bind
使XForms引擎根据/model/textofselect
节点的值计算/model/valueofselect
节点的值。为此,它使用XPath谓词从项列表中选择所选项的文本值。
要使绑定可以访问select1
项,它们不会被定义为xforms:select1
节点的子项。相反,它们会使用xforms:itemset
element放入xforms:model
。