CoffeeScript クラスでd3.js Streamgraphを使用しています。マウスオーバーでパスの色が変わり、ツールチップが表示されるように調整しました。
ここで、ツールチップ ロジックの一部を別の関数に取り出したいと思います。
実行コンテキストをどちらか一方に調整できますが、両方を渡す方法がわかりません。
class Graph
render: ->
...
dataArea.enter()
.append("path")
.on("mouseover", @onMouseOver) # Option 1 - Pass path context
.on("mouseover", @onMouseOver.bind(@)) # Option 2 - Pass class context
onMouseOver: (data) ->
d3.select(this).attr("class", "") # 1. Depends on path context (to adjust styling)
@tooltipHelper(data) # 2. Depends on class context (which holds helper function)
tooltipHelper: (data) ->
...
以前、クリック イベントに関する同様の質問について、@loganfsmyth から大きな助けを得ました。これは、次の行に沿った答えを示唆しています。
.on("mouseover", (d) => @onMouseOver(d))
onMouseOver: (data) ->
d3.select(data.target).attr("class", "")
残念ながら、これはうまくいかないようです。したがって、この質問の別の言い方は、「マウス オーバー イベントの event.target に相当するものは何ですか?」ということになるかもしれません。
@meetamit からのこの回答も関連しています。クロージャーの外側で宣言された変数に (Graph のインスタンス) を代入することでこれを回避することを提案してthis
いますが、これはすべてをクロージャーに入れるため、CoffeeScript では不可能だと思います。
手伝ってくれますか?