2013-04-03 43 views
0

我有一個dojo類,使用dojo/_base/declare創建,其中包括onClickHandler。該處理程序由dijit/form/Button用於處理類中存儲的數據。我需要處理程序能夠引用觸發事件的Button和處理程序所屬類的實例。具有多個上下文的dojo功能

例如,下面是從類的處理函數的第一部分:

drawToolClick : function(evt) { 

    this.drawingtoolbar.deactivate(); // Here `this` should represent the instance of my class 

    var parent = this.getParent(); // Here `this` should represent the button that was clicked 

我知道,我顯然不能用this同時代表,但是當我使用dojo/_base/langhitch我的課實例的功能,我不知道哪個按鈕被點擊(我有多個按鈕使用相同的處理程序,因爲它們代表enum)。如果我忽略了被點擊的按鈕,但我不知道如何獲取處理程序所屬的類的實例。

有沒有更好的方法來做到這一點?

+0

這個班的目的是什麼?如果它是一個UI類,那麼你可以*子類*'Button'而不是?如果它是* model *數據,那麼你確定一個點擊處理程序應該附加到它,因爲點擊處理程序是UI。 – 2013-04-03 21:52:06

+0

這個類基本上是我最初用非AMD風格編寫的所有函數和變量,我已經通過將它包裝到類中轉換爲AMD。我不會說它遵循任何特定模式,旨在從功能(即MVC)中分離出UI和數據。我的應用程序是一個Web映射應用程序,所以這個類代表了使用我正在使用的映射API所需的所有代碼。這就是爲什麼我在這個類中放置了'onclick'處理程序,因爲處理程序中的代碼處理地圖。 – Brian 2013-04-04 16:06:28

回答

0

所以,我終於明白了這一點。我只是在我的模塊中添加了一個變量var self;,其中的類在declare聲明之前定義。然後,在我的課上constructor功能我加了self = this;

然後在我的onclick處理程序中,我使用this來引用被單擊的按鈕,並且我使用self來引用類實例。

這似乎工作正常。