document.addEventListener“这个”背景下
问题描述:
我正在写一个简单的CoffeeScript类,但我运行到一个上下文的问题与此代码:document.addEventListener“这个”背景下
class DragDrop
constructor: (@selector, @bodyDragEnterClass = "drag-over") ->
@attachEventHandlers()
attachEventHandlers:() ->
document.write(@bodyDragEnterClass) # this line tells me, that @bodyDragEnterClass is "drag-over"
document.addEventListener("dragenter", @onDragEnter, false)
onDragEnter:() ->
document.write(@bodyDragEnterClass) # this line tells me, that @bodyDragEnterClass is undefined
jQuery("body").addClass(@bodyDragEnterClass)
window.DragDrop = DragDrop
当attachEventHandlers方法被调用时,@bodyDragEnterClass是按预期设置为“拖拽”。但是,当触发dragenter事件并调用onDragEnter方法时,@ bodyDragEnterClass为“未定义”。
我创建了一个的jsfiddle证明上下文问题就在这里:http://jsfiddle.net/SVvrM/
我怎样才能解决这个问题?
答
CoffeeScript中有“fat arrow”的经典案例。
您需要访问在不同上下文中执行的回调内的DragDrop this
值。使用FAT箭头会的this
当前值绑定到onDragEnter
功能:
# "fat arrow" function binding
onDragEnter:() =>
document.write(@bodyDragEnterClass) # this line tells me, that @bodyDragEnterClass is undefined
jQuery("body").addClass(@bodyDragEnterClass)
@马丁这是你周围的CS场景中获得的方式,但你应该明白它做什么引擎盖下。将胖箭头代码粘贴到在线CS代码中,并查看它是如何设置“self = this”的 – Trevor 2013-02-14 02:32:40