orbeon - 如何使用 xforms 的选定值执行某些操作 :select every time they change?

标签 orbeon xforms

我在 Orbeon Forms 上运行的 XForms 遇到此问题。我正在使用 fr:box-select控制如下:

<fr:box-select bind="box-select-bind" id="box-select-control">
        <xforms:action ev:event="xforms-value-changed">
         <xxforms:variable name="selected-value" select="."/>
         <xforms:message level="modal">Hello:<xforms:output select="$selected-value" />
         </xforms:message>

        </xforms:action>

        <xforms:itemset nodeset="instance('codes')/box-select/item">
                                    <xforms:label ref="label"/>
                                    <xforms:value ref="value"/>
         </xforms:itemset>
   </fr:box-select>

绑定(bind)到一个简单的 XML 文件:

<box-results></box-results>

XML 代码如下所示:

<box-select>
    <item>
        <label>Cat</label>
        <value>cat</value>
    </item>
    <item>
        <label>Dog</label>
        <value>dog</value>
    </item>
    <item>
        <label>Bird</label>
        <value>bird</value>
    </item>
    <item>
        <label>Fish</label>
        <value>fish</value>
    </item>
</box-select>

当我检查框中的条目时,我的节点 <box-results>使用由空格分隔的选定值进行更新,这似乎是预期的。但是,我似乎找不到任何有关如何处理所选值的文档。我想访问刚刚选择、取消选择的值并在 xpath 中使用该项目的值。因此,如果选择了一个值,那么我会这样做:

<setvalue
 ref="somexpath[id=$selected-value]/display
 value="'true'"/>

如果取消选择某个值,我会这样做:

<setvalue
 ref="somexpath[id=$selected-value]/display
 value="'false'"/>

基本上,我只想知道要使用的事件,以及如何在事件触发时访问该值。然后我想在 xpath 中使用这个值。我将使用它来隐藏/显示表单的部分内容。使用 xforms-value-changed 事件 Xpath“.”没有返回我所期望的结果,就像在“select1”控件中那样。

我可以循环遍历所有选择的值,如下所示:

<xforms:action ev:event="xforms-select" xxforms:iterate="for $s in tokenize(instance('data-inst')/box-results,'\s')return xxforms:element('text',$s)">
    <xforms:message level="modal">Hello selected:<xforms:output select="$s" />
</xforms:action>

但是,这并不完全是我所需要的。我也许能够完成这项工作,但这需要更多的工作,因为我需要知道取消选择哪些内容来更改用户的显示。

最佳答案

由于在您的情况下,您不需要具体知道哪个值发生了变化,因此您可以在值更改时重置somexpath[id=$selected-value]中的所有值。如所须。您可以使用以下代码来完成此操作,该代码仅使用 <xforms:setvalue>xxforms:iterate :

<xforms:action ev:event="xforms-value-changed">
    <xxforms:variable name="selected-values" select="tokenize(., '\s+')"/>
    <xforms:setvalue xxforms:iterate="instance('codes')/item" 
                     ref="@selected">false</xforms:setvalue>
    <xforms:setvalue xxforms:iterate="$selected-values"
                     ref="for $v in . return instance('codes')/item
                     [value = $v]/@selected">true</xforms:setvalue>
</xforms:action>

另请参阅the full source使用上述代码片段的示例。

关于orbeon - 如何使用 xforms 的选定值执行某些操作 :select every time they change?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7560527/

相关文章:

php - 如何将 Php 生成的 Xml 加载到 Xforms 表单中进行编辑?

postgresql - Orbeon Forms Postgres 数据库连接

forms - Xforms 复选框 - 用 Y/N 替换 True/False

css - 带有 twitter bootstrap css 的 XLSTForms

java - 使用 Orbeon XForms 将表单提交(发布)到 Java Servlet

javascript - Sencha 触摸 : How to implement xForms with Sencha Touch?

javascript - XForms 重复 - JavaScript 错误

xquery - XForms:绑定(bind)的复杂计算

css - 使用 Orbeon Forms 设计 Web 应用程序

xforms - Xform 的一些性能调优技术