d3.js/CoffeeScript:访问mouseover中类和路径的执行上下文(this)
d3.js / CoffeeScript: Access execution context (this) of both class and path in mouseover
我在CoffeeScript类中使用d3.js流图。我对它进行了调整,以便在鼠标悬停时,路径的颜色会发生变化,并显示工具提示。
现在,我想将一些工具提示逻辑提取到一个单独的函数中。
我可以将执行上下文调整为一个或另一个,但不知道如何同时传递这两个:
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) ->
...
之前,我从@loganofsmyth那里得到了一些关于点击事件的类似问题的帮助。这将提出一个大致的答案:
.on("mouseover", (d) => @onMouseOver(d))
onMouseOver: (data) ->
d3.select(data.target).attr("class", "")
不幸的是,这似乎不起作用。因此,这个问题的另一种表述方式可能是"鼠标悬停事件的event.target等价物是什么?"
同样相关的还有@meetamit的回答。它建议通过将this
(Graph的实例)分配给在闭包外声明的变量来绕过这一点,但我想这在CoffeeScript中是不可能的,因为这会将所有内容都放入闭包中。
你能帮忙吗?
在这种情况下,您可以使用全局变量d3.event
来访问所需的所有信息。
相关文章:
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JavaScript执行暂时挂起页面
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 当js函数's已执行
- 哪个先执行
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- HTML表单提交时未执行外部函数
- 在Safari执行javascript之前对其进行修改
- Amd,希望确保某个东西总是最后执行
- 节点命令不执行星号路径
- 在网页上执行绝对路径的所有点击前面加上网址
- JavaScript执行路径
- 使挖空计算订阅不在初始执行路径中的可观察量
- 节点.js相对需要执行脚本的路径
- 将变量创建到路径JSON是由jQuery执行的操作
- node.js,bluebird,执行路径控制不力
- d3.js/CoffeeScript:访问mouseover中类和路径的执行上下文(this)
- 为什么在获取脚本路径时使用自执行匿名函数?
- 如何获取当前文件中可执行文件的路径
- 我收到警告“值返回不是所有执行路径”在javascript中的jQuery.grep