寻找一个常见问题的优雅解决方案:
我有一个订阅了几个事件的类,我希望处理程序是我的类中的实例方法,但也想获取事件上下文(为这种情况触发事件的元素)。
我正在使用胖线语法进行方法定义但无法获取事件上下文。具体来说我正在使用raphael js,当在元素上订阅时,事件对象不包含元素,只有dom元素,所以没有事件上下文我将不得不通过它在文件里面的raphael id搜索元素,而我不喜欢它。
在这种情况下,最佳做法是什么?我正在每次订阅事件之前创建一个新的上下文对象,上下文包含实例引用和元素引用。
答案 0 :(得分:5)
如果我理解正确,您希望在处理函数中保留对绑定和未绑定上下文的引用。您可以通过手动执行类似于胖箭头的操作来实现此目的:
class TheListenerObject
constructor: ->
context = @ # some people may call it `self`
@theHandlerMethod = () ->
referenceToTheListenerObjectInstance = context
referenceToTheUnboundContext = @