我不确定你通常应该如何在Atom Packages中处理这个问题,但情况就是这样:
我创造了一个漂亮的按钮
playButton = document.createElement('button');
playButton.onclick = @funkyFreshCallback;
这将调用我的回调定义为
funkyFreshCallback: (event, element) ->
console.log(@);
现在,我想要的是能够使用元素的父范围。 查看 @ 符号?现在它返回按钮元素(因为那是当前的这个,我知道)
现在我如何访问范围呢?定义 funkyFreshCallback 的那个?
此外,我真的不觉得我应该做什么,但我还没有找到太多的文档......
答案 0 :(得分:1)
您可以将父上下文绑定到函数上,然后再将其设置为事件处理程序。
playButton.onclick = @funkyFreshCallback.bind(@);
避免上下文问题的另一种方法是设置一个调用funkyFreshCallback
的函数。事件处理程序应该只处理事件,然后将最小的必需数据集传递给回调,如下所示:
playButton.onclick = (event, element) =>
timePressed = Date.now();
@funkyFreshCallback(timePressed);
使用上面的代码,将使用您期望的上下文调用funkyFreshCallback,并且不会收到非常复杂的事件对象作为参数。这有助于简化funkyFreshCallback
的写入单元测试,并且它应该简化您的回调,因为他们不必处理事件。