更新引用的实例数据时,XForms绑定不会更新

时间:2012-09-27 14:56:20

标签: orbeon xforms

我的问题是:

我的模型中有2个实例:

<xf:instance id="Include-model">
    <data>
        <value type="xs:string">true</value>
    </data>
</xf:instance>

这是连接到一个复选框, 和

<xf:instance id="items-model">
    <items>
        <item>1</item>
        <item>2</item>
        <item>3</item>
</xf:instance>

我将绑定声明为:

<xforms:bind id="items-bind" nodeset="items[instance('Include-model')/value = 'true']">

复选框正确更新Include模型,但绑定不会更新以反映此情况。基本上,如果选中复选框,我需要显示项目,否则隐藏它们。初始状态是正确的,但是当我选中/取消选中复选框时,更改不会反映在绑定中。

永远感谢所有能提供帮助的人。

2 个答案:

答案 0 :(得分:0)

您可以尝试

<xforms:bind id="items-bind" nodeset="instance('items-model')" relevant="instance('Include-model')/value = 'true'" />

答案 1 :(得分:0)

首先,我可以看到您在此处提供的代码段中存在多个问题。

  1. 此处缺少结束标记。它应该看起来像

        <xforms:instance id="items-model">
            <items>
                <item>1</item>
                <item>2</item>
                <item>3</item>
            </items>
        </xforms:instance>
    
  2. 提到的绑定中的节点集用于项目。它应该是项目。由于没有给出从表单生成器或“手写”代码中提取代码的信息,我不能说它是正确的。对于“手写”代码,您案例中的绑定定义将如下所示

        <xforms:bind id="items-bind" nodeset="instance('items-model')/item[instance('Include-model')/value = 'true']" />
    
  3. 以下是您可以针对此案例运行的完整Xforms代码。尝试将值作为'true'运行,并再次将值作为'false'来理解bind是如何工作的。

    <xhtml:html xmlns:xhtml="http://www.w3.org/1999/xhtml"
        xmlns:xxforms="http://orbeon.org/oxf/xml/xforms"
        xmlns:xforms="http://www.w3.org/2002/xforms">
    
        <xhtml:head>
          <xhtml:title>Xforms</xhtml:title>
    
          <xforms:model>
    
            <xforms:instance id="Include-model">
                <data>
                    <value type="xs:string">true</value>
                </data>
            </xforms:instance>
    
    
            <xforms:instance id="items-model">
                <items>
                    <item>1</item>
                    <item>2</item>
                    <item>3</item>
                </items>
            </xforms:instance>
    
            <xforms:bind id="items-bind" nodeset="instance('items-model')/item[instance('Include-model')/value = 'true']" />
    
    
          </xforms:model>
    
        </xhtml:head>
    
        <xhtml:body>
    
            <table>
                <tr>
                    <td>Bind items are
                        <xforms:output value="
                            string-join(xxforms:bind('items-bind'), ' -- ')
                            " />
                    </td>
                </tr>
            </table>
    
        </xhtml:body>
    
    </xhtml:html>