5

寻找一个常见问题的优雅解决方案:

我有一个订阅少量事件的类,我希望处理程序成为我的类中的实例方法,但也想获取事件上下文(在这种情况下事件触发的元素)。

我正在为方法定义使用粗线语法,但无法获取事件上下文。具体来说,我使用的是 raphael js,并且在订阅元素时,事件对象不包含元素,只有 dom 元素,所以没有事件上下文我将不得不通过它在论文中的 raphael id 来搜索元素,而我不喜欢。

在这种情况下,最佳做法是什么?我目前在每次订阅事件之前创建一个新的上下文对象,上下文包含实例引用和元素引用。

4

1 回答 1

5

如果我理解正确,您希望在处理函数中保留对绑定和未绑定上下文的引用。您可以通过手动执行类似于胖箭头的操作来实现此目的:

class TheListenerObject
  constructor: ->
    context = @ # some people may call it `self`
    @theHandlerMethod = () ->
      referenceToTheListenerObjectInstance = context
      referenceToTheUnboundContext = @
于 2012-04-12T07:18:42.513 回答