아이

2013-02-24 3 views
0

에 부모 클래스의 참조를 전달 나는 하위 클래스에 부모 클래스의 인스턴스에 대한 참조를 전달하기 위해 노력하고있어. 부모 클래스는 다음과 같습니다아이

class UI 

    constructor: (parameters) -> 

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

AddBts 및 도구 모음 클래스는 다음과 같습니다

class AddBTS 
    constructor:() -> 


    display:() => 
    $("#setBuildingTileSet").show() 
    console.log 'Showing Sir' 

이러한 모든 클래스

class Toolbar 
    constructor: (@parent) -> 

    add_bts_clickhandler:() => 
    $('body').on 'click', '#add_bts', -> 
     @parent.addBTS.display() 


별도 커피 스크립트 파일에 정의되어에서 comalation 전에 함께 결합 다음 순서 (게임 UI의 인스턴스가있는 곳) :

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

제의 생성 된 자바 스크립트 :이 라인에서

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

: 리턴 .parent.addBTS.display();
은 콜백 함수()를 참조합니다! add_bts_clickhandler가 아닙니다.

내가 당신을 도왔 으면합니다.