在重复中插入实例

时间:2012-05-10 18:00:46

标签: orbeon

我的情况如下:

  1. 我有一个节点集,我通过它迭代并使用一些数据填充表格
  2. 其中一个领域,我想总结一下
  3. 问题: 遗憾的是,我不能使用sum方法进行计算,因为nodeset是访问其他表单数据的自定义函数。这似乎搞砸了。

    我对解决方案的想法: 我想,我可以创建一个实例,并在每次迭代中添加值。然后,我只需访问该数据并执行所需的任何计算。但我无法获得xforms:insert to work。

    简化版本如下所示:

                <xforms:repeat nodeset="(xxforms:si-source-forms('other_form'))">
                  <!-- table here -->
                  <xforms:insert
                     nodeset="instance('fr-form-instance')//positionen/position"
                     origin="instance('neue-position')"/>
                </xforms:repeat>
    

    'neue-position'实例包含对源表单中值的绑定:

      <xforms:bind id="neue-position-binds" nodeset="instance('neue-position')">
        <xforms:bind id="neue-position-bind" nodeset="position">
          <xforms:bind id="neue-position-summe-bind" nodeset="summe" name="summe" type="xforms:string" required="true" xxforms:default="xxforms:si-source-forms('other_form')//gesamtbetrag_ausgabe" />
        </xforms:bind>
      </xforms:bind>
    

    虽然它没有按预期工作,所以显然有些不对劲。我很感激任何提示。

1 个答案:

答案 0 :(得分:1)

关于您的第一个代码段:

你的<xforms:insert>不会有任何影响。您在视图中,并且只有在附加到事件侦听器时才会运行操作。如果ev:listener上没有<xforms:insert>(或者对该插入执行操作),它就不会运行。

关于对不在实例中的节点进行求和:

假设您的自定义函数对数据返回只有一个“总和”,您可以按这些行编写代码:

  1. 将函数返回的节点序列存储在变量<xf:var name="others" ref="xxforms:si-source-forms('other_form')"/>
  2. 在重复中使用该变量:<xf:repeat ref="$others">(顺便说一下,现在XForms正在标准化使用ref到处,代替nodeset)。
  3. 进行计算:<xf:var name="my-sum" ref="sum($others/path/to/values)"/>
  4. 最后,我想你想用$my-sum做一些事情,也许用<xf:output>来表示。