2015-11-13 66 views
1

我不知道你怎麼通常應該凌包內處理這個問題,但是這是情況:訪問父範圍(凌動包)

我創建了一個漂亮的按鈕

playButton = document.createElement('button'); 
playButton.onclick = @funkyFreshCallback; 

這將調用我的回調定義爲這樣

funkyFreshCallback: (event, element) -> 
    console.log(@); 

現在,我想要的是能夠使用元素的父範圍。 請參閱@符號?現在它返回按鈕元素(因爲這是當前的,我知道)

現在我該如何訪問範圍?定義爲funkyFreshCallback

此外,它真的不覺得這是我如何應該做的事情,但我還沒有找到很多文件...。

回答

1

在將父上下文設置爲事件處理函數之前,您可以將父上下文綁定到該函數上。

playButton.onclick = @funkyFreshCallback.bind(@); 

另一種方式避免上下文的問題是要建立調用funkyFreshCallback的功能。事件處理程序應該只處理該事件然後沿着最小集合所需的數據傳遞給回調,像這樣:

playButton.onclick = (event, element) => 
    timePressed = Date.now(); 
    @funkyFreshCallback(timePressed); 

通過上面的代碼,funkyFreshCallback將與您所期望的上下文中調用,並且不會收到一個非常複雜的事件對象作爲參數。這有助於簡化funkyFreshCallback的單元測試,並且它應該簡化回調,因爲它們不必處理事件。

更多關於Chapter 7 of Maintainable JavaScript

+0

哦哇!不敢相信我不知道綁定!謝謝。 –

+0

是的,在設置事件偵聽器時,這是一個非常典型的用例,通常用全局上下文來調用事件偵聽器。 –

+0

修改爲包含備用解決方案和說明 –