0

我正在使用 CoffeeScript 类创建一个 d3.js 图表。我想将一个方法附加到单击事件,然后根据单击的内容运行另一个方法:

class @Chart

  drawChart: ->
     ...

    dataArea
      .enter()
        .append("path")
          .on("click", @onClick);
     ...

  onClick: ->
    if d3.select(this).attr("type") == 'video'
      @runVideo(d3.select(this).attr("title"))

  runVideo: ->

问题是在 onClick 方法中,执行上下文(“this”)是选择而不是 Chart 类,所以“runVideo 不是函数”。如何从 onClick 方法中访问选择属性并运行 runVideo 方法?

4

1 回答 1

1

您想要做的是this在添加点击回调时以某种方式捕获。

你有几个选择:

// The Coffeescript way:
.on("click", (args...) => @onClick(args...));

// The jQuery way:
.on("click", $.proxy(@onClick, @))

// The ECMAscript5 way:
.on("click", @onClick.bind(@))

然后你需要解决onClick这个问题:

onClick: (evt) ->
  if d3.select(evt.target).attr("type") == 'video'
    @runVideo(d3.select(evt.target).attr("title"))
于 2012-11-18T20:26:53.447 回答