2012-04-12 2 views
5

유지 :커피 스크립트 클래스 상황과 일반적인 문제에 대한 우아한 해결책을 찾고 이벤트 컨텍스트

내가 몇 가지 이벤트를 구독 클래스를 얻었다을, 나는 핸들러 내 클래스 내에서 인스턴스 메서드가되고 싶어요, 이벤트 컨텍스트 (이 경우 이벤트가 실행 된 요소)를 가져 오려고합니다.

메서드 정의에 팻말 구문을 사용하고 있지만 이벤트 컨텍스트를 가져올 방법이 없습니다. 구체적으로 나는 라파엘 js를 사용하고 있는데, 엘리먼트를 구독 할 때 이벤트 객체는 엘리먼트를 포함하지 않는다. 단지 dom 엘리먼트만으로 이벤트 컨텍스트가 없기 때문에 엘리먼트를 검색해야한다. 그것을 좋아하지 않아.

이 경우 가장 좋은 방법은 무엇입니까? 현재 이벤트에 가입 할 때마다 새로운 컨텍스트 개체를 생성하고 있습니다. 컨텍스트에는 인스턴스 참조와 요소 참조가 들어 있습니다.

답변

5

올바르게 이해하면 처리기 함수에서 바인딩 된 컨텍스트와 언 바운드 컨텍스트에 대한 참조를 유지하려고합니다. 수동으로 지방 화살표가하는 일에 유사한 일을하여이 작업을 수행 할 수 있습니다 :

class TheListenerObject 
    constructor: -> 
    context = @ # some people may call it `self` 
    @theHandlerMethod =() -> 
     referenceToTheListenerObjectInstance = context 
     referenceToTheUnboundContext = @ 
+0

이 공통 솔루션입니다 ... 그것은 작동합니다 있지만 내부의 마법을 얻었다. 컨텍스트는이 코드가 실행될 때마다 새로운 익명 개체의 처리기 메서드로 래핑됩니다. (js의 성격으로) 존재한다면 나는 더 깨끗한 방법을 찾고있다. 내가 말했듯이이 문제를 피하기 위해 핸들러 내부에 컨텍스트를 만들었습니다. –

+1

@ChenKinnrot 그런 다음 몇 가지 코드 예제를 제공하는 것이 좋습니다. 당신이 정확히 원하는 것과 당신이 이미 달성 한 것을 이해하는 것은 매우 어렵습니다. 내가 말할 수있는 한 가지는 함수가 외부 스코프에서 어떤 객체를 참조하기를 원한다면 필연적으로 그것을 어떤 단계에서 클로저로 포장 한 다음 각각의 새로운 컨텍스트에 대해 함수를 다시 선언해야한다는 것입니다. 여기에는 마법이 없습니다, 단지 자바 스크립트입니다. –

+0

더 좋은 방법, 감사합니다 수 없습니다. –

관련 문제