在子元素的onclick回调中访问父范围(Atom包)

时间:2015-11-13 21:29:41

标签: javascript coffeescript

我不确定你通常应该如何在Atom Packages中处理这个问题,但情况就是这样:

我创造了一个漂亮的按钮

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

这将调用我的回调定义为

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

现在,我想要的是能够使用元素的父范围。 查看 @ 符号?现在它返回按钮元素(因为那是当前的这个,我知道)

现在我如何访问范围呢?定义 funkyFreshCallback 的那个?

此外,我真的不觉得我应该做什么,但我还没有找到太多的文档......

1 个答案:

答案 0 :(得分:1)

您可以将父上下文绑定到函数上,然后再将其设置为事件处理程序。

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

避免上下文问题的另一种方法是设置一个调用funkyFreshCallback的函数。事件处理程序应该只处理事件,然后将最小的必需数据集传递给回调,如下所示:

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

使用上面的代码,将使用您期望的上下文调用funkyFreshCallback,并且不会收到非常复杂的事件对象作为参数。这有助于简化funkyFreshCallback的写入单元测试,并且它应该简化您的回调,因为他们不必处理事件。

Chapter 7 of Maintainable JavaScript

中的更多内容