2

Orbeon バージョン: Orbeon Forms 3.8.0.201005270113

Javascript ファイルに次のコードがあります。このコードは実行されますが、XBL 内のモデルが見つからないようです。

ORBEON.xforms.Document.dispatchEvent("model-name", "event-name");

これが XBL のモデルです。XBL にはいくつかのモデルがあります。メッセージが表示されないので、モデルが見つからないようです。ログにエラーはありません。

<xforms:model id="model-name" xxforms:external-events="event-name">
  <xforms:action ev:event="event-name">
    <xforms:message>Test</xforms:message>
  </xforms:action>
</xforms:model>

Javascript から XBL にディスパッチを機能させるためのトリックがあるかどうかは誰にもわかりませんか?

どうもありがとう!

更新しました:

もう 1 つの問題 (おそらく?) は、instance(this) を使用して XBL から JavaScript を呼び出すことが機能しないことです。クラスのインスタンスがコンポーネント インスタンスに関連付けられていないため、モデルが見つからないのだろうか?

init メソッドを呼び出さないxbl からの JavaScript への呼び出しは次のとおりです。

<xxforms:script>YAHOO.xbl.fr.myTest.instance(this).init();</xxforms:script>

init() メソッドを呼び出す呼び出しは次のとおりです

<xxforms:script>YAHOO.xbl.fr.myTest.prototype.init();</xxforms:script>

これがJavaScriptです:

YAHOO.namespace("xbl.fr");
YAHOO.xbl.fr.myTest = function() {};
ORBEON.xforms.XBL.declareClass(YAHOO.xbl.fr.myTest, "xbl-fr-myTest");

YAHOO.xbl.fr.myTest.prototype = {
},

init: function() {
    alert('test');
},

valueChanged: function() {
},

};
4

1 に答える 1

1

AFAIK you can't address the XBL-internal model directly from outside, because of its strong encapsulation.

Instead, you'll have to dispatch the event to the xbl component node. For example, if you want an instance of the fr:currency XBL to handle a certain event, you'll have to dispatch the event to that fr:currency element that's part of your XForm.

Inside the XBL, you can define xbl:handlers to act upon that event, triggering some JavaScript action or something else.

于 2011-10-12T13:52:41.203 に答える