如何使用Select1的值AND文本填充和XForms模型?

时间:2011-07-25 09:43:56

标签: xforms

我是XForms的新手,我在尝试找到解决方案时遇到了一些问题,这似乎是一个相对微不足道的问题。我的表单上有一个select1控件,我想将模型中的一个项目绑定到选定的值和控件的选定文本,这样我就可以在提交表单时存储这两个值。

我的模型看起来像这样:

<model>
<valueofselect/>
<textofselect/>
</model>

你们中的一位XForms大师能否发布一个如何实现这一目标的小例子。

非常感谢你。

1 个答案:

答案 0 :(得分:2)

有不同的方法可以实现这一目标:

  • 使用xforms:setvalue设置/model/textofselect节点的值;
  • 使用xforms:bind与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