2012-05-11 1 views
2

は、私は、ユーザーがspan要素をクリックするとjQueryから現在のXMLインスタンスを更新する際にJavaScriptでいくつかのロジックを実行したいです:OrbeonのXFormsでは、jQueryを使用してXMLインスタンスを更新する方法は?</p> <p>(!私はオンライン2と同様の質問を見てきましたが、それらは決して答えないGOT)</p> <p>のXForms:

<xhtml:span class="buttonPlusOne" id="plusVat">+</xhtml:span> 
<xf:output ref="instance('submitted_instance')/TotVATAmnt"></xf:output> 
<xf:input id="changeVatTotal" ref="instance('submitted_instance')/TotVATAmnt"></xf:input> 

はJavaScript:

$('span.buttonPlusOne').on('click', function() { 
    // do some logic and increment value for 0.01 
    orbeonElId = $(this).siblings('#changeVatTotal').children('input').attr('id'); 
    // alert(orbeonElId) produces right id (changeVatTotal$xforms-input-1) 
    // alert(newValue) produces 0.02 (for example) 
    ORBEON.xforms.Document.setValue(orbeonElId, newValue); 
}); 

私は(Firebugのを)Orbeonのポスティングデータを見ることができますが、XMLインスタンス更新されません(入力が同じ "ref"属性を共有していても、出力は更新されません)。

答えて

3

html要素のIDとxf:input要素のXForms ID(id属性)が混在しているとします。

Orbeonのマニュアルshows an exampleORBEON.xforms.Document.setValue()で使用するIDは、(サーバー側の)XForms要素のIDです。したがって、あなたの例では、それは​​であり、(クライアント側の)html入力要素changeVatTotal$xforms-input-1のidではありません。 XFormsインスタンスに何の影響も与えないように、ファックバグにリクエストが表示されます。サーバ側のXFormsエンジンは、changeVatTotal$xforms-input-1という要素を持つxf:input要素を見つけられません。

これは、ターゲット要素のIDを計算する必要はなく、単にxf:inputの "普通の" XForms id属性値を使用できることを意味します。

代わり:

それはXFormsの中で完全に "プラス" ボタンを処理することは可能ですか?私は、このソリューションは、作業クライアント側と一部のサーバー側の一部を行うよりも、より安定していることだと思う

<xf:trigger> 
    <xf:label>+</xf:label> 
    <xf:setvalue 
     ev:event="DOMActivate" 
     ref="instance('submitted_instance')/TotVATAmnt" 
     value="0.01 + instance('submitted_instance')/TotVATAmnt" /> 
    <.... more actions ...> 
</xf:trigger> 

:あなたはxforms:trigger controlDOMActivateイベントにxforms:setvalueアクションを含めるを使用することができます。

+0

おかげさまで、#changeVatTotalを試してみましたが、 同じ問題が再び発生しました。 入力が出力を変更しないようです(異常な動作 - 同じ「ref」attrを共有しています)。 JQueryと関係があると思いますか? 本当にイライラするのを助けようとしてくれてありがとう、すでに良いものをいくつか過ごした...! – alchemication

+0

実際、私はJQueryに接続されている可能性があります。たとえば、JQueryに依存しないxforms-readyイベントのORB要素(xf:input要素)にORBEON.xforms.Document.setValue()を発行してテストできます。ところで:setvalueをトリガするのと同じ入力要素を更新しようとしますか? setvalue()ターゲットとして他の入力要素(隠されたものも含む)を使用すると、何か変更されますか? – tohuwawohu

+0

** 1 **入力に0.01を追加するには、** "+" **ボタン(その最初のxhtmlスパン)を押しています(同じ "ref"を持つように出力を更新する必要があります) -** 2。** JQueryで別のIDを使用して更新する場合: ORBEON.xforms.Document.setValue( 'invoiceDate'、currValue); ' - それは動作し、#invoiceDate入力:テキストは新しい値を取得します。 これはあなたの質問に答えますか? – alchemication

関連する問題

 関連する問題