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 に答える