在this thread中,Mike Bostock解释说,设置画笔的范围并重新绘制画笔是两个独立的操作。我理解这一点,但我在解决细节方面遇到了麻烦。
他说你需要做以下事情:
brush.extent([0.2, 0.8]);
svg.select(".brush").call(brush);
但是,当我执行call(brush)
时,它只是在新范围上绘制画笔矩形。 “焦点”图表永远不会更新。但是,如果我调用我的brushed
函数(我分配给我的画笔的函数),它就可以工作。
似乎call(brush)
没有执行brushed
。如何让它执行此功能?
更新:Here's a fiddle with my code。运行它时,请注意画笔已正确绘制,但焦点未更新。取消注释第180行,焦点也会重新绘制。
(当然,最终我会想要从图表对象外部做到这一点,但是现在我正在做的只是为了弄清楚出了什么问题。)
基本上,我问:如何从对象外部触发brushed
函数?画笔事件处理程序如何执行此操作?
答案 0 :(得分:3)
显式设置画笔的extent
不会触发导致与其关联的功能被调用的事件。在这种情况下,最简单的解决方案是,正如您已经发现的那样,在设置范围后明确地调用brushed()
。