可以从Javascript调度XBL中的Orbeon事件吗?

时间:2011-10-11 19:04:43

标签: javascript orbeon dispatchevent xbl

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?

非常感谢!

更新:

可能是问题的另一件事(可能是?)是使用实例(this)从XBL调用javascript无法正常工作。我想知道类的实例是否与组件实例无关,因此无法找到模型?

这是从xbl调用javascript,没有调用init方法:

<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() {
},

};

1 个答案:

答案 0 :(得分:1)

AFAIK由于其强大的封装性,您无法直接从外部处理XBL内部模型。

相反,你必须dispatch the event to the xbl component node。例如,如果您希望fr:currency XBL的实例处理某个事件,则必须将事件发送到那个fr:currency element ,这是您的XForm的一部分。

在XBL中,您可以定义xbl:handlers to act upon that event,触发一些JavaScript操作或其他内容。