我一直在阅读有关coffeescript的遗产模型的一些内容,我感觉我正处于意识形态辩论的边缘,我真的不明白。所以,我很高兴发现我只是以错误的方式做事。
基本上我正在做的是编写一组小部件,除其他外,需要处理DOM元素上的事件。我认为一个好的方法是使用一个类方法,该方法将被调用一次,以委托小部件可能需要的所有事件。基本窗口小部件类可能有一些简单的单击处理程序,而子类可能会添加一些鼠标悬停处理程序或额外的单击处理程序。
然而,似乎我不应该尝试在静态方法中调用super()
。有一种解决方法存在,(this.__super__.constructor.METHODNAME()
但我已经看到很多建议,这不是我想要做的最佳方式。有没有人对我应该如何构建有任何见解这段代码?继续使用变通方法,或者将所有委托放在一个完全不同的地方?我真的不能只把它放在原型中,因为我不一定要有一个实例来调用这个方法(或者我可以基本上仍然从静态上下文中调用原型上的方法,比如将SwatchableWidget.prototype.delegateEvents()
放入onload函数或其他东西?
这里有一些代码来说明我在说什么:
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()
感谢您的帮助。
答案 0 :(得分:3)
我建议更换
this.__super__.constructor.delegateEvents()
带
Widget.delegateEvents()
尝试使用super来调用静态方法不是必需的(并且没有多大意义)
答案 1 :(得分:2)
我不明白为什么delegateEvents
是一个类级别的方法,或者为什么Widget.delegateEvents
必须再次从SwatchableWidget.delegateEvents
调用。如果它只是类初始化代码,你应该直接把它放在类体中:
class Widget
console.log "delegate some generic events"
...
@testProp: "ThemeWidget"
class SwatchableWidget extends Widget
console.log "delegate some specific swatchable widget events"
...
@testProp2 = "SwatchWidget"
在运行此初始化代码之前,我认为您正在等待特定的DOM状态?如果你告诉我更多关于delegateEvents
的先决条件的话,我可以提出另一种方法。
答案 2 :(得分:1)
听起来你想要一种不同类型的继承模型,其中某个类型的每个继承函数(“父调用”)将遍历继承树并调用其所有父类同名。
您可以在编写时手动调用每个子项中的任何直接父函数。然后它会在你指定这种关系的任何地方浮动继承链。
我会将构造函数中的父委托调用绑定到当前的类函数
delegateparents =>
#call any parent class methods