xml – 同一模型标记的XForms和多个输入
如果我没有正确地问这个问题,我会提前道歉……很难说出我要问的内容.
我有XForms模型,如: <file> <criteria> <criterion></criterion> </criteria> </file> 我想有多个输入文本框,用于创建新的条件标记. 用户界面如: <xf:input ref="/file/criteria/criterion" model="select_data"> <xf:label>Select</xf:label> </xf:input> <xf:input ref="/file/criteria/criterion" model="select_data"> <xf:label>Select</xf:label> </xf:input> <xf:input ref="/file/criteria/criterion" model="select_data"> <xf:label>Select</xf:label> </xf:input> 我希望XML输出看起来像这样(一旦用户输入信息): <file> <criteria> <criterion>AAA</criterion> <criterion>BBB</criterion> <criterion>CCC</criterion> </criteria> </file> 我拥有它的方式不起作用,因为它看到3个输入字段都指向相同的标准标记.我如何区分? 谢谢!我希望这有点道理! 开始第一次编辑 感谢基本文本框的回复! 但是,我现在需要使用列表框执行此操作.但对于我的生活,我无法弄清楚如何.我读到了与xforms一起使用的地方:选择和取消选择事件..但我不知道放在哪里,我尝试的地方给了我非常奇怪的行为. 我目前正在实施以下内容: <xf:select ref="instance('criteria_data')/criteria/criterion" selection="" appearance="compact" > <xf:label>Choose criteria</xf:label> <xf:itemset nodeset="instance('criteria_choices')/choice"> <xf:label ref="@label"></xf:label> <xf:value ref="."></xf:value> </xf:itemset> </xf:select> 但是,当提交多个选项时,所有选择值都将插入到同一节点中,并以空格分隔. 例如: 如果从列表框中选择AAA和BBB和FFF,则会产生以下XML: <criterion>AAA BBB FFF</criterion> 如何更改代码以使每个选择都在单独的节点中? 即我希望它看起来像这样: <criterion>AAA</criterion> <criterion>BBB</criterion> <criterion>FFF</criterion> 谢谢! 完成第一次编辑 开始第二次编辑: 对于列表框(即xf:select appearance =“compact”) 所选答案对于文本框非常有效,因此我选择它作为答案. 结束第二次编辑 解决方法
如果三个标准对你来说足够了,那么你应该在括号中使用索引:
<xf:input ref="/file/criteria/criterion[1]" model="select_data"> <xf:label>Select</xf:label> </xf:input> <xf:input ref="/file/criteria/criterion[2]" model="select_data"> <xf:label>Select</xf:label> </xf:input> <xf:input ref="/file/criteria/criterion[3]" model="select_data"> <xf:label>Select</xf:label> </xf:input> 但是如果你使用xf:repeat,你可以添加所需的标准: <xf:group ref="/file/criteria" mode="select_data"> <xf:repeat nodeset="criterion"> <xf:input ref="."> <xf:label>Select</xf:label> </xf:input> </xf:repeat> <xf:trigger> <xf:label>Insert new row</xf:label> <xf:insert nodeset="criterion" position="after" at="last()" ev:event="DOMActivate"/> </xf:trigger> <xf:trigger> <xf:label>Delete last row</xf:label> <xf:delete nodeset="criterion" at="last()" ev:event="DOMActivate" /> </xf:trigger> </xf:group> 注意:这个带有重复的例子需要一些抛光,这样你就不能删除表中的最后一行,并且可能隐藏最后一行,当你插入一个新行时,它会重复.有关其他示例,请参见http://en.wikibooks.org/wiki/XForms#Tabular_and_Repeating_Data. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |