dojo小部件不会发出事件

时间:2013-11-27 17:43:26

标签: javascript events dojo widget

我有一个自定义的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);
});

对于听众来说,我已经尝试过收听onSelectCompleteselectCompleteSelectCompleteselectcompleteselect-complete,而且都没有。我也尝试使用aspect.after代替on,但这也行不通。我能够在调试时确定正确调用第一个自定义窗口小部件的onSelectComplete

我被困了......

2 个答案:

答案 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'});

但这只是触发一次而不是冒出来。

您可以按照自己的说明订阅任何其他小部件。 告诉我你是否需要一个有效的例子。