2013-02-24 51 views
0

我试图将对父类实例的引用传递给它的子类。父类是:将父类的引用传递给子代

class UI 

    constructor: (parameters) -> 

    @addBTS = new AddBTS 
    @toolbar = new Toolbar(this) 

的AddBts和工具栏类:

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文件中定义和comalation之前被连接在一起以下顺序(Game是UI的实例所在的地方):

'src/Game' 
    'src/UI/UI' 
    'src/UI/AddBTS' 
    'src/UI/Toolbar' 

不,当我打电话add_bts_clickhandler:()我得到的错误信息:*无法读取属性“addBTS”的不确定*

因此认为,父母是不确​​定的,当它显然不是。

请有人可以帮助我,我完全卡住,因为我的代码接缝很好。

回答

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() 

部分生成的java脚本:

Toolbar.prototype.add_bts_clickhandler = function() { 
    return $('body').on('click', '#add_bts', function() { 
     return this.parent.addBTS.display(); 
    }); 
}; 

在这一行:返回 .parent.addBTS.display();
这个指的是回调函数()!而不是add_bts_clickhandler。

我希望我帮你。

相关问题