有一个漂亮的图,我想复制(然后修改)发现的。此处. 我的项目使用Backbone和Coffeescript编写的D3.js。每个backbone.view都有自己的d3 plot类型。在大多数情况下,这一直很好,直到现在。为了简明扼要,我不会从链接中复制所有的代码,我已经尽最大努力几乎完全复制了它(主要的区别是使用的数据)。那么问题是这样的... 图形完全渲染,事件似乎被 "注册",但它们没有触发。我试图使用D3事件而不是backbone+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.node
)对象是我希望事件发生的地方。在这个例子中,我不在乎它们是做什么的,只要它们能触发。我已经用开发工具以两种方式检查了节点。两种方式都表明一个监听器已经被添加到对象中。
1 => (使用控制台)
> d3.selectAll("text.node")
揭示一个文本节点的列表,所有节点都有属性。__onmouseout: function....
和 __onmouseover function....
2 => 我还通过选择 dom 元素来检查它(同样在开发工具中的 Elements
选项卡),并在右栏选择 Event Listeners
. 这也表明 mouseover
和 mouseout
.
该 发出 是,什么都没有发生。完全没有。 我不认为这是Backbone + Jquery + D3.js组合的问题,因为在简单的柱状图中添加了 .on("mouseover", ...)
到矩形的完美工作。
如果有我遗漏的相关信息,请告诉我。这是一个相当有压力的问题,我不完全确定这个问题应该包括什么。
好吧,在继续和继续寻找解决方案后,我终于从头开始删除所有样式和其他一切在页面上渲染的东西。 它的工作。所以代码不是垃圾。是有别的东西在干扰。我一一把其他视图加回页面。还是能用。我取消了css的注释。断了。我花了点时间去看CSS,但最终我找到了......所以只要忽略每个文本上的指针事件就可以了。
text{
pointer-events: none;
}
...所以就忽略所有文本对象上的指针事件... 对吗? 因为这听起来是个好主意。
删掉这一行后,所有的东西都能正常工作了。对不起,狼来了。
干杯,gs