我试图将对父类实例的引用传递给它的子类。父类是:
class UI
constructor: (parameters) ->
@addBTS = new AddBTS
@toolbar = new Toolbar(this)
AddBts和Toolbar类是:
class Toolbar
constructor: (@parent) ->
add_bts_clickhandler: () =>
$('body').on 'click', '#add_bts', ->
@parent.addBTS.display()
class AddBTS
constructor: () ->
display: () =>
$("#setBuildingTileSet").show()
console.log 'Showing Sir'
所有这些类都在单独的CoffeeScript文件中定义,并在按照以下顺序进行缩进之前连接在一起(游戏是UI实例所在的位置):
'src/Game'
'src/UI/UI'
'src/UI/AddBTS'
'src/UI/Toolbar'
不,当我致电add_bts_clickhandler: ()
时,我收到错误消息:*无法读取属性' addBTS'未定义的*
所以它认为父母是未定义的,当它显然不是。
请有人帮助我,我完全卡住了,因为我的代码接缝很好。
答案 0 :(得分:2)
我的解决方案:
我打电话给add_bts_clickhandler:
ui = new window.UI();
ui.toolbar.add_bts_clickhandler();
我的课程:
class window.UI
constructor: (parameters) ->
@addBTS = new window.AddBTS
@toolbar = new window.Toolbar(this)
class window.AddBTS
constructor: () ->
display: () =>
$("#setBuildingTileSet").show()
console.log 'Showing Sir'
class window.Toolbar
constructor: (@parent) ->
add_bts_clickhandler: () =>
p = @parent ## introduce a new variable!
$('body').on 'click', '#add_bts', ->
p.addBTS.display(); ##
#@parent.addBTS.display()
让我们更接近工具栏类:
class window.Toolbar
constructor: (@parent) ->
add_bts_clickhandler: () =>
$('body').on 'click', '#add_bts', ->
@parent.addBTS.display()
生成的javascript的一部分:
Toolbar.prototype.add_bts_clickhandler = function() {
return $('body').on('click', '#add_bts', function() {
return this.parent.addBTS.display();
});
};
在此行中:返回此 .parent.addBTS.display();
这个指的是回调函数()!不是add_bts_clickhandler。
我希望我帮助过你。