>我正在尝试创建一个发出自定义事件的自定义 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 中触发自定义事件并接收它们的正确方法是什么?
dojo/on
它仅适用于 DOM 节点,如果您从 dijit/_WidgetBase
扩展,则可以使用一个名为 on() 的方法,例如:
myWidget.on("customevent", function(data) {
console.log( " received notification "+data );
});
如果从dojo/_base/declare
扩展,则可以考虑使用dojo/topic
并实现发布-订阅模式。它允许"类/模块"相互通信。
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");
});