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

一种选择是返回一个在另一个引用原始 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 回答