私の明るいアイデアの 1 つは、最初に考えていたよりも少し明るくないように見えることです。
背景 - 列の 1 つで DBLookups を使用して、ビューに対して従来の繰り返し制御ソリューションを実行する必要がありました。列の合計が必要なので、viewScope 変数を使用して小計を保持し、繰り返しコントロールの行で値を計算するときに値を追加することにしました。
理論的には良さそうに思えますが、何らかの理由で、繰り返しコントロール内で計算フィールドを使用すると、値が 2 回計算されます (そして小計に追加されます)。繰り返し内に同じコードを含む計算フィールドと編集ボックスの両方を使用して、次の行に沿ったコードでこれを確立しました。
<xp:text escape="true" id="computedField9">
<xp:this.value><![CDATA[#{javascript:
//some calculations, nothing to see here*
var subTotal = viewScope.get("valueColumnTotal");
viewScope.put("valueColumnTotal", subTotal + sumVals);
sessionScope.put("Testing", sessionScope.get("Testing") + "~" + sumVals);
return sumVals;
}]]></xp:this.value>
//converters and stuff, nothing to see here
</xp:text>
<xp:inputText id="inputText1">
<xp:this.value><![CDATA[#{javascript:
//Same as the computed field above
</xp:this.value>
</xp:inputText>
値が 1、2、3 の場合、sessionScope 変数は 0~1~1~1~2~2~2~3~3~3 を示し、小計は 18 と表示されます。テキスト ボックスを削除すると、0~ になります。 1~1~2~2~3~3と小計12
つまり、計算フィールドでは double の値を、編集ボックスでは single の値を取得しています。説明できないゼロもありますが、それは単なる初期値であり、心配する必要はないと思います。
リピートが何かでリフレッシュされたのかと思ったら、1~2~3~1~2~3と予想。
計算フィールドがいつ計算されるかについて基本的なことを理解していないだけだと思いますが、困惑しています。エディット ボックスに切り替えることもできると思いますが、ここでは計算フィールドの方が適していると思います。
誰かがこれに光を当てることができますか?