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 的调度是否有一些技巧?

非常感谢!

更新:

可能是问题的另一件事(也许?)是使用 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 由于其强大的封装性,您无法直接从外部处理 XBL 内部模型。

相反,您必须将事件分派到xbl 组件节点。例如,如果您希望fr:currencyXBL 的一个实例处理某个事件,则必须将该事件分派给XFormfr:currency element的一部分。

在 XBL 中,您可以定义xbl:handlers 来对那个事件采取行动,触发一些 JavaScript 动作或其他东西。

于 2011-10-12T13:52:41.203 回答