2012-02-17 6 views
3

バインディングの複雑な計算を実行する可能性を探しています。以下のインスタンスが与えられます。XForms:バインディングの複雑な計算

<root> 
    <appointments> 
    <appointment><date>2012-01-01</date></appointment> 
    <appointment><date>2012-01-03</date></appointment> 
    </appointments> 
    <weeks /> 
</root> 

weeksノードはappointmentのノードに依存します。

$weeks = 0 
$week_begin = xs:date("1970-01-01") 
for $appointment in //appointments/appoinment 
    if # Check if $appointment is in new week 
    $weeks = $weeks + 1 
    $week_begin = # Do some more calculationx 

私の問題は、私はこれらの計算を「置く」する場所がわからないということです。ご覧のとおり、ループサイクル間に情報を格納できる変数を持つループが必要です。

  1. のXForms:XFormsのと組み合わせて、変数:繰り返し=>のXForms:したがって、私は、次のオプションが評価されている組み合わせでのsetValue:繰り返しの内部変数は、「外」の範囲には
  2. XFormsを書き込むことはできません一時変数とXFormsを保持している余分なインスタンスに:
  3. XFormsの繰り返し:XPathの中でループの計算属性でバインド=を>可能ですが、ノー変数

この問題にアプローチする方法の任意のアドバイスはありますか?ありがとうございました!

+0

このような複雑な計算の例を教えていただけますか?上記の例は、不完全なものです。 – Jayy

+0

私は、「アルゴリズム」をより具体的にするRubyコードをいくつか持っています... https://gist.github.com/c3bf9d7948a538b5bbd0 – lacco

答えて

2

予定ノードセットが変更された場合にトリガされる計算をJavascriptで実装できます。 Orbeonフォームを使用している場合は、xxforms:script拡張子を使用できます。 Orbeonのwikiにはexample how to set an instance value based on a javascript calculationがあります。

もう1つの解決策は、計算を完全に「外部化」し、計算結果を返す小さなWebサービス(XQuery?)を作成することです。 xforms:submitメカニズムを使用して、そのサービスにフィードし、その結果にアクセスすることができます。

関連する問題