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 文件中,并在组合之前按以下顺序连接在一起(游戏是 UI 实例所在的位置):

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

不,当我打电话时,add_bts_clickhandler: ()我收到错误消息: * 无法读取未定义的属性 'addBTS' *

所以它认为 parent 是未定义的,但显然不是。

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

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

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

我希望我对你有所帮助。

于 2013-02-24T20:18:37.593 回答