这和_this在coffeescript的d3回调中

时间:2013-04-08 09:56:23

标签: javascript coffeescript d3.js

我有一个使用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

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

一个选项是返回一个函数,该函数在对原始函数的另一个引用时关闭:

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

这样,当事件处理程序调用该函数时,this是DOM元素,self引用原始this对象。当然,这个解决方案意味着你失去了速记@符号。