2

ユーザーがスパン要素をクリックし、jQuery から現在の XML インスタンスを更新するときに、JavaScript でいくつかのロジックを実行したいと考えています。

(オンラインで同様の質問を 2 つ見たことがありますが、回答がありませんでした!)

Xフォーム:

<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);
});

Orbeon の投稿データ (Firebug) を確認できますが、XML インスタンスは更新されません (同じ "ref" 属性を共有していても、入力は出力を更新しません)。

4

1 に答える 1

3

html 要素の ID と要素の XForms ID (id属性) を混同していると思いますxf:input

Orbeon のドキュメントに例が示さORBEON.xforms.Document.setValue()れています。関数呼び出しで使用するID は、(サーバー側の) XForms 要素の ID です。したがって、あなたの例でchangeVatTotalは、(クライアント側)html input element の id ではありませんchangeVatTotal$xforms-input-1。これが、XForms インスタンスに影響を与えずに firebug にリクエストが表示される理由です。サーバー側の XForms エンジンはxf:inputid を持つ要素を見つけられないためchangeVatTotal$xforms-input-1、そのリクエストをどう処理すればよいかわかりません。

これは、(通常) ターゲット要素の id を計算する必要がなく、代わりに xf:input の「プレーンな」XForms id 属性値を使用できることも意味します。

または:

XForms で「プラス」ボタンを完全に処理することは可能ですか? xforms:triggerコントロールを使用して、イベントにxforms:setvalueアクションを含めることができます。DOMActivate

<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>

このソリューションは、クライアント側とサーバー側でいくつかの作業を行うよりも安定していると思います。

于 2012-05-11T11:58:31.533 に答える