2013-02-13 11 views
1

나는 간단한 커피 스크립트 클래스를 쓰고 있어요,하지만이 코드로 상황에 맞는 문제로 실행 해요 :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는 "정의되지 않음"입니다. http://jsfiddle.net/SVvrM/

가 어떻게이 문제를 해결할 수 :

나는 여기에 상황에 맞는 문제를 입증하는 jsfiddle을 만들었습니다?

답변

2

CoffeeScript의 "fat arrow"에 대한 고전적인 사례가 있습니다.

다른 컨텍스트에서 실행되는 콜백 내에서 DragDrop this 값에 액세스해야합니다. 이 @Martin

# "fat arrow" function binding 
onDragEnter:() => 
    document.write(@bodyDragEnterClass) # this line tells me, that @bodyDragEnterClass is undefined 
    jQuery("body").addClass(@bodyDragEnterClass) 
+1

당신이 CS에서 상황 극복 방법입니다,하지만 당신은 후드 아래에 무엇을하는지 이해해야합니다 지방 화살표를 사용하면 onDragEnter 기능에 this의 현재 값을 바인딩합니다. 굵은 화살표 코드를 온라인 CS repl에 붙여 넣고'self = this'를 어떻게 설정하는지 봅니다 – Trevor

관련 문제