【问题标题】:this and _this on a d3 callback in coffeescript咖啡脚本中的 d3 回调中的 this 和 _this
【发布时间】:2013-04-08 20:15:03
【问题描述】:

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

我应该怎么做?

【问题讨论】:

  • 所以你需要一个变量同时成为两个不同的东西?您是否尝试过使用d3.select(this) 获取元素?
  • @LarsKotthoff 我需要解决歧义。我需要一种方法来获取与回调函数调用相关的 DOM 元素,并且我需要访问成员对象。

标签: javascript coffeescript d3.js


【解决方案1】:

一种选择是返回一个在另一个引用原始 this 时关闭的函数:

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

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

【讨论】:

  • 这似乎是正确的,但由于某种原因,我需要 on_click: () -> 代替。有什么想法吗?
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-15
  • 2014-07-29
  • 2011-11-02
  • 1970-01-01
  • 2011-11-27
相关资源
最近更新 更多