我有一个自定义的dojo小部件,我需要在另一个第三方小部件上侦听一个事件,然后将该事件对象的事件发送到另一个自定义小部件。出于某种原因,我的自定义窗口小部件没有发出事件,或者事件没有正确地注册到我的第二个自定义窗口小部件。
以下是我的第一个自定义小部件中与事件相关的代码:
onSelectComplete : function(evt) {
// this custom widget inherits from dojo/Evented. I've tried using this.emit and I've tried inheriting from _WidgetBase
on.emit(self, "select", evt);
},
startDrawing : function() {
//self._drawToolbar is the 3rd party widget from an API
self._drawToolbar.activate(Draw.POLYGON);
self._drawEndHandle = self._drawToolbar.on("draw-end", self.onSelectComplete);
},
这是我的第二个自定义小部件中的监听器:
on(self._selector, "select", function(evt) {
console.log(evt);
});
对于听众来说,我已经尝试过收听onSelectComplete
,selectComplete
,SelectComplete
,selectcomplete
,select-complete
,而且都没有。我也尝试使用aspect.after
代替on
,但这也行不通。我能够在调试时确定正确调用第一个自定义窗口小部件的onSelectComplete
。
我被困了......
答案 0 :(得分:1)
抱歉,我没有尽快提供答案,但我确实找到了解决方案。
我没有让我的dojo模块继承自dojo/Evented
,而是让它继承自dijit/_WidgetBase
。通过这样做,我的自定义dojo模块/小部件现在实现了on
函数。
所以在我的第一个小部件中,我有一个名为onSelectComplete : function (evt) {}
的空函数,当我想要发出事件时,我会调用它。
在我的第二个小部件中,我的代码是:
on(self._selector, "selectComplete", function(evt) {
console.log(evt);
});
答案 1 :(得分:0)
明确说明:onXXX功能是旧的发射方式。 我很好,但它被弃用了!
到底是什么' self'?你的意思是:'这个'?
从dojo / Evented继承的任何小部件都可以
on.emit(this, "select", {anyProperty: 'will be mixed in the event'});
以上是冒泡的,这似乎是你想做的事情?
您也可以
this.emit("select", {anyProperty: 'will be mixed in the event'});
但这只是触发一次而不是冒出来。
您可以按照自己的说明订阅任何其他小部件。 告诉我你是否需要一个有效的例子。