0
我在CoffeeScript类中使用了d3.js Streamgraph。我已经调整了它,以便在鼠标悬停时,路径的颜色发生变化并出现工具提示。d3.js/CoffeeScript:在mouseover中访问类和路径的执行上下文(this)
现在我想把一些工具提示逻辑提取到一个单独的函数中。
我可以调整执行上下文,以一个或其他,但无法弄清楚如何通过这两个:
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一些很大的帮助上一个similar question了解点击事件。这将提示沿着这些方向的答案:
.on("mouseover", (d) => @onMouseOver(d))
onMouseOver: (data) ->
d3.select(data.target).attr("class", "")
不幸的是,这似乎并不奏效。因此,另一种表述这个问题的方式可能是“鼠标悬停事件的event.target等同于什么”。
也与@meetamit的this answer相关。它建议通过将this
(Graph的实例)分配给在闭包外部声明的变量来实现这一点,但我想这在CoffeeScript中是不可能的,因为这会将所有内容放入闭包中。
你能帮忙吗?
您应该可以访问全局变量'd3.event',如果我理解正确,它应该包含所有需要的信息。 –
@LarsKotthoff,这是完美的。它是我以后的'd3.event.currentTarget'。如果你把它作为答案,我会接受它。 –
完成,谢谢:) –