我有一個自定義dojo小部件,我需要偵聽另一個第三方小部件上的事件,然後將該事件對象發送到另一個自定義小部件。出於某種原因,我的自定義小部件沒有發佈該事件,或者該事件未使用我的第二個自定義小部件正確註冊。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
被正確調用。
我卡住了...
雖然猜測函數是自定義窗口小部件聲明的一部分,但使用'self'表示法是錯誤的。當您的瀏覽器到達代碼時,您的(全局?)變量'self'可能未定義或初始化爲指向另一個對象。 I.e ..轉換爲'this' :) – mschr
@mschr - 在我的構造函數中,我設置變量'self = this'。我這樣做是因爲我在我的應用程序中也使用jQuery,jQuery不像dojo那樣處理'this'。 – Brian
你在你的構造函數中使用'var self = this'還是'self = this'?第二種情況是設置全局'self'這是非常非常糟糕的主意!您所提供的代碼中不需要「self」。只需用'this'替換'self',你就可以走了。 – twil