0

親クラス インスタンスへの参照をその子クラスに渡そうとしています。親クラスは次のとおりです。

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 ファイルで定義されており、comalation の前に次の順序で結合されます (Game は UI のインスタンスが存在する場所です)。

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

いいえ、呼び出すadd_bts_clickhandler: ()と次のエラー メッセージが表示されます: * 未定義のプロパティ 'addBTS' を読み取れません *

そのため、明らかにそうではない場合、親は未定義であると考えます。

誰かが私を助けてくれませんか、コードの継ぎ目がうまくいかないので、私は完全に立ち往生しています。

4

1 に答える 1

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

Toolbar クラスをもう少し詳しく見てみましょう。

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

この行で: return this .parent.addBTS.display();
これは、コールバック関数() を指します! add_bts_clickhandler ではありません。

お役に立てば幸いです。

于 2013-02-24T20:18:37.593 に答える