backbone.js d3.js事件已注册但未触发

e5nszbig  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(130)

我想复制一张漂亮的图表(然后修改)找到了here。我的项目使用了用Coffeescript编写的Backbone和D3.js。每个backbone.view都有自己的d3绘图类型。到目前为止,大多数情况下都很好。为了简洁起见,我不会复制链接中的所有代码,我已经尽了最大的努力来复制它(主要的区别是使用的数据)。因此,问题是......图形完全呈现,事件看起来是“注册的”,但它们不会触发。我尝试使用D3事件而不是 Backbone.js +jQuery事件。因此,围绕事件的实际代码看起来如下所示:
(一切都在咖啡里)

@node = @node
    .data( nodes.filter((d)-> !d.children ))
    .enter().append("text")
      .attr("class", "node")
      .attr("dy", ".31em")
      .attr("transform", (d)-> "rotate(#{d.x-90})translate(#{d.y+8},0)#{if d.x<180 then "" else "rotate(180)"}")
      .style("text-anchor", (d) -> if d.x < 180 then "start" else "end")
      .text((d) -> d.key)
      .on("mouseover", -> alert("hi"))
      .on("mouseout", -> alert("hi"))

这看起来应该与示例几乎完全相同... text nodes(text.node)对象是我希望事件在其上触发的对象。在本示例中,我不关心它们做什么,只要它们触发即可。我已经用dev工具以两种方式检查了节点。这两种方式都表明对象中添加了一个侦听器。
1 =〉(使用控制台)

> d3.selectAll("text.node")

显示文本节点的列表,所有节点都具有以下属性:__onmouseout: function....__onmouseover function....
2 =〉我还通过选择dom元素(同样在dev工具的Elements选项卡下)检查了它,并在右列选择了Event Listeners。这也显示了mouseovermouseout

问题是,什么都没有发生。什么都没有发生。我不认为这是一个Backbone + Jquery + D3.js组合的问题,因为在简单的条形图中,将.on("mouseover", ...)添加到矩形中可以完美地工作。

如果我遗漏了任何相关的信息,请告诉我。这是一个相当紧张的问题,我不完全确定这个问题应该包括什么。

w8f9ii69

w8f9ii691#

好吧,在不断地寻找解决方案之后,我终于从零开始删除页面上呈现的所有样式和其他所有内容。它起作用了。所以代码不是胡说八道。其他东西在干扰。我一个接一个地将其他视图添加回页面。仍然起作用。我取消了css的注解。坏了。我花了一段时间费力地浏览CSS,但最终我发现:

text{
    pointer-events: none;
}

......所以忽略每个文本对象上的所有指针事件......对吗?因为这听起来是个好主意。
删除了线路之后一切正常。抱歉,狼来了。
干杯,gs

相关问题