如何从自定义类中发出自定义事件并在Dojo 1.11中侦听它?

时间:2017-01-25 05:05:36

标签: javascript events dojo event-handling

我试图创建一个自定义Dojo类,它发出一个自定义事件,我试图从调用类中侦听该事件。

我还没有为此找到一个完整的样本,我就被困在这里。

我尝试过以下方法:

在我的自定义类中,我有以下代码:

   on.emit(this, "PointFound", {
           Msg:"Found a point Within minDistance",
           point:selctedPoint
           });

这不会导致任何错误。我被困的地方在于如何倾听它。

当我尝试(正确初始化课程后):

            on(findUtilInstance,"PointFound", function(e){
                console.log(e);
            });

我收到一条错误消息:Error: Target must be an event emitter

当我尝试(正确初始化课程后):

            findUtilInstance.on("PointFound", function(e){
                console.log(e);
            });

我收到错误:TypeError: findUtilInstance.on is not a function

Dojo 1.11.2中用于触发自定义事件并接收它们的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

dojo/on它仅适用于DOM节点,如果您从dijit/_WidgetBase延伸,那么它可以工作,那么您可以使用一个名为on()的方法,例如:< / p>

myWidget.on("customevent", function(data) {
    console.log( " received notification "+data );
});

如果您从dojo/_base/declare延伸,则可以考虑使用dojo/topic并实施发布 - 订阅模式。 哪个允许&#34;类/模块&#34;相互沟通。

  

dojo / topic提供了一个用于发布和订阅的集中式中心   到主题的全局消息。可以使用订阅主题   topic.subscribe(),消息可以使用topic.publish()发布。

基本上,您可以将dojo/topic用于:

  • 向一个或多个类实例广播(发布)消息(事件/主题)。
  • 您可以从每个实例收听(订阅)您的消息并在那里应用您的逻辑。
require(["dojo/topic"], function(topic){
    topic.subscribe("some/topic", function(){
        console.log("received:", arguments);
    });
    // ...
    topic.publish("some/topic", "one", "two");
});