じぶんの 状況 次のとおりです。
- 私はノード・セットを持っています。これを使って、データの一部を反復して表に挿入します
- フィールドの1つ、私は要約したい
問題: 残念ながら、ノードセットは他のフォームのデータにアクセスするカスタム関数なので、計算にはsumメソッドを使用できません。そして、それは事を台無しにするようです。
解決策の私の考え: 私は、インスタンスを作成し、各反復でそれに値を追加することができたと思った。それから、私は単にそのデータにアクセスし、必要な計算を実行するだけです。しかし、私はxformsを取得することはできません:挿入するために動作します。
簡略版は次のようになります:
<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は1最初のコードスニペットについて:
きみの <xforms:insert>
あなたがビューに入っていて、イベントリスナーにアタッチされている場合にのみアクションが実行されます。なし ev:listener
〜に <xforms:insert>
(またはそのインサートの周りのアクション)、それはちょうど "実行されませんでした。
インスタンス内にないノード上で合計を実行することについて:
あなたのカスタム関数によって返されるデータの上にただ1つの "合計"があると仮定すると、それらの行に沿ってコードを書くことができます:
- 関数によって返されたノードのシーケンスを変数に格納する
<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>
.