He estado leyendo un poco sobre el modelo de herencia de coffeescript y tengo la sensación de estar al margen de un debate ideológico que realmente no entiendo. Entonces, estaría perfectamente feliz de descubrir que solo estoy haciendo las cosas de la manera incorrecta.Métodos estáticos y herencia en Coffeescript
Básicamente lo que estoy haciendo es escribir un conjunto de widgets que, entre otras cosas, necesitan manejar eventos en sus elementos DOM. Pensé que una buena forma de hacerlo sería tener un método de clase que se llamaría una vez, para delegar todos los eventos que el widget podría necesitar. La clase de widget base puede tener algunos manejadores de clic simples, mientras que la subclase podría agregar algunos manejadores de mouseover o manejadores de clic extra.
Sin embargo, parece que se supone que no debo intentar hacer el equivalente a llamar a super()
dentro de un método estático. Existe una solución que existe, (this.__super__.constructor.METHODNAME()
) pero he visto muchas sugerencias de que esta no es la mejor manera de hacer lo que estoy tratando de hacer. ¿Alguien tiene alguna idea de cómo debería estructurar este código? ¿Utilizo la solución alternativa o puse toda la delegación en un lugar totalmente diferente? No puedo simplemente incluirlo en el prototipo, ya que no necesariamente tendré una instancia para llamar al método (o puedo seguir llamando a un método ? en el prototipo de un contexto estático, como poner SwatchableWidget.prototype.delegateEvents()
en una función onload o algo
Aquí hay un poco de código para ilustrar lo que estoy hablando:
class Widget
@testProp: "ThemeWidget"
@delegateEvents: ->
console.log "delegate some generic events"
class SwatchableWidget extends Widget
@testProp2 = "SwatchWidget"
@delegateEvents: ->
console.log "delegate some specific swatchable widget events"
this.__super__.constructor.delegateEvents()
Widget.delegateEvents()
SwatchableWidget.delegateEvents()
Gracias por cualquier hel pag.
me gusta esto, pero entonces cada clase derivada sería necesario llamar explícitamente que es eventos de clase delegado de padres. Si los nombres de las clases principales están alterados, los eventos delegados y las llamadas similares deberían actualizarse manualmente.Releyendo mi propia respuesta, todavía no sé de una forma clara de llamar automáticamente como funciones nombradas en los padres más allá de lo que sugiere el autor de la pregunta original. –