0

次のように d3 を使用して作成された要素があります。

redraw:()->
  #
  points = d3.select(".point").data( the_data )
  points.enter().append("g").classed("point").on("click", @on_click )


on_click:(d,i)-> 
  matrix = this.getScreenCTM()
  # do some stuff
  @popup.show(params)

popupメソッドを持つメンバー オブジェクトshow()です。

問題はon_click()、データ メンバーを参照できるように、コールバックでこれを DOM オブジェクトとインスタンスの両方にする必要があることpopupです。

どうすればいいですか?

4

1 に答える 1

1

1 つのオプションは、元の this への別の参照で閉じられる関数を返すことです。

on_click: do ->
  self = this
  return (d,i) -> 
    matrix = this.getScreenCTM()
    self.popup.show(params)

このようにして、関数がイベント ハンドラーによって呼び出されるとthis、DOM 要素になりself、元のthisオブジェクトが参照されます。もちろん、この解決策は省略@表記を失うことを意味します。

于 2013-04-08T12:07:53.957 に答える