2015-11-13 67 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

修改为包含备用解决方案和说明 –