2012-04-12 17 views
5

尋找優雅的解決方案,以一個共同的問題:咖啡腳本 - 保存課程背景和事件上下文

我訂閱了一些事件類,我希望處理程序是我的類中的實例方法,但也想獲取事件上下文(該事件觸發的元素)。

我使用方法定義的胖線語法,但沒有辦法獲得事件上下文。具體來說,我使用的是raphael js,當訂閱元素時,事件對象不包含元素,只有dom元素沒有事件上下文,所以我必須通過它在紙張內部的raphael id搜索元素,而我不喜歡它。

這種情況下的最佳做法是什麼?我現在正在每次訂閱事件前創建一個新的上下文對象,上下文包含實例引用和元素引用。

回答

5

如果我正確地理解了你,你希望在處理函數中保持對綁定和未綁定上下文的引用。你可以通過手動做類似於胖箭頭的東西來實現這一點:

class TheListenerObject 
    constructor: -> 
    context = @ # some people may call it `self` 
    @theHandlerMethod =() -> 
     referenceToTheListenerObjectInstance = context 
     referenceToTheUnboundContext = @ 
+0

這是常見的解決方案......它會工作,但它有一定的魔力。每當代碼運行時,上下文將被處理器方法包裝在一個新的匿名對象中。 (作爲js的本質),如果存在,我正在尋找一種更清潔的方式。正如我所說,我在處理程序中創建了上下文以避免此問題。 – 2012-04-12 07:30:43

+1

@ChenKinnrot那你最好提供一些代碼示例。很難理解你想要的東西以及你已經取得的成就。我可以肯定地說的一件事是,如果你想讓函數從外部作用域引用某個對象,你不可避免地必須在某個階段將它封裝在閉包中,然後爲每個新的上下文重新聲明函數。這裏沒有魔術,只是javascript。 – 2012-04-12 09:01:06

+0

無法處理更好的方法,謝謝。 – 2012-05-01 13:57:01