我的情况如下:
问题: 遗憾的是,我不能使用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>
虽然它没有按预期工作,所以显然有些不对劲。我很感激任何提示。
答案 0 :(得分:1)
关于您的第一个代码段:
你的<xforms:insert>
不会有任何影响。您在视图中,并且只有在附加到事件侦听器时才会运行操作。如果ev:listener
上没有<xforms:insert>
(或者对该插入执行操作),它就不会运行。
关于对不在实例中的节点进行求和:
假设您的自定义函数对数据返回只有一个“总和”,您可以按这些行编写代码:
<xf:var name="others" ref="xxforms:si-source-forms('other_form')"/>
<xf:repeat ref="$others">
(顺便说一下,现在XForms正在标准化使用ref
到处,代替nodeset
)。<xf:var name="my-sum" ref="sum($others/path/to/values)"/>
。$my-sum
做一些事情,也许用<xf:output>
来表示。