【问题标题】:Can an Orbeon event in an XBL be dispatched from Javascript?XBL 中的 Orbeon 事件是否可以从 Javascript 分派?
【发布时间】:2011-12-05 13:53:06
【问题描述】:

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 不起作用。我想知道类的实例是否没有绑定到组件实例,因此它找不到模型?

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

};

【问题讨论】:

    标签: javascript orbeon dispatchevent xbl


    【解决方案1】:

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

    相反,您必须dispatch the event to the xbl component node。例如,如果您想要一个 fr:currency XBL 的实例来处理某个事件,则必须将该事件分派给 作为 XForm 一部分的 fr:currency element

    在 XBL 内部,您可以定义 xbl:handlers to act upon that event,触发一些 JavaScript 动作或其他东西。

    【讨论】:

    • 谢谢!我会试试看!
    • @mstrom:希望它有效!如果是,请随时接受答案;)(如果不起作用,请报告任何错误)
    • @mstrom 是对的;在 JavaScript 中,您需要在发送事件时以 XBL 中的控件为目标。可以这样想:由于您的页面中可以有该组件的多个实例,因此当您说“将事件my-event 发送到my-model”时,当服务器获取该信息时,它无法知道@ 的哪个实例987654328@你说的。相反,如果您向控件发送事件,您将从 DOM 获取该控件,并使用它的 id。该 id 将包含 XForms 引擎所需的所有信息,以了解您正在谈论的 XBL 组件的哪个实例。
    猜你喜欢
    • 2021-09-19
    • 2012-06-18
    • 2011-10-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多