2012-04-12 11 views
5

Buscando solución elegante a un problema común:coffeescript - preservar el contexto de clase y el contexto de evento

Tengo una clase que se suscriben a pocos eventos, quiero que el controlador sea un método de instancia dentro de mi clase, pero también quiere obtener el contexto del evento (el elemento activado por el evento para este caso).

Estoy usando la sintaxis de líneas gruesas para la definición del método pero no obtuve la forma de obtener el contexto del evento. Para ser concreto estoy usando raphael js y cuando me suscribo al elemento el objeto del evento no contiene el elemento, solo el elemento dom así que sin el contexto del evento tendré que buscar el elemento por su identificación raphael dentro del documento, y no me gusta

¿Cuál es la mejor práctica en este caso? Actualmente estoy creando un nuevo objeto de contexto antes de cada vez que me suscribo al evento, el contexto contiene la referencia de la instancia y la referencia del elemento.

Respuesta

5

Si le entiendo correctamente, quiere mantener las referencias a los contextos tanto enlazados como no vinculados en la función del manejador. Usted puede lograr esto haciendo manualmente algo similar a lo que hace la flecha grasa:

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

Esta es la solución común ... funcionará pero tiene algo de magia dentro. el contexto se ajustará con el método del controlador en un nuevo objeto anónimo para cada vez que se ejecute este código. (como la naturaleza de js) Estoy buscando una manera más limpia si existe. como dije, creé el contexto dentro del controlador para evitar este problema. –

+1

@ChenKinnrot, entonces será mejor que proporciones algunos ejemplos de código. Es muy difícil entender lo que quieres exactamente y lo que ya has logrado. Una cosa que puedo decir con certeza es que si desea que la función haga referencia a algún objeto desde el ámbito externo, inevitablemente deberá envolverlo en un cierre en alguna fase y luego tener la función siendo redeclarada para cada nuevo contexto. Aquí no hay magia, solo javascript. –

+0

no podría mejorar una mejor manera, gracias. –

Cuestiones relacionadas