我正在并排显示几个相同的图表(显示不同的数据集)。刷一张图表后,刷子应该复制到其他所有图表上。
目前,只要有人在图表上刷新,我就会在brush.move
所有图表上调用selection
,而不是当前刷过的图表。这发生在brush
- 类型eventListener。
但是,此brush.move
会触发附加到画笔的brush
- 类型事件,从而导致错误(或者更常见的是无限循环)。
我该如何防止这种情况?
答案 0 :(得分:4)
您可以使用d3.event
对象来检查导致刷子更新的原因。来自brush events上的API文档:
刷子事件
调用brush event listener时,d3.event设置为当前画笔事件。事件对象公开了几个字段:
- ...
sourceEvent
- 基础输入事件,例如mousemove或touchmove。
如果您的画笔是以编程方式修改的,即通过调用brush.move()
,d3.event.sourceEvent
属性将为null,因为没有输入事件导致此更新。在您的事件处理程序中,您可以检查此属性以跳过执行程序更改:
if (!d3.event.sourceEvent) return;
Mike Bostock在Brush Snapping Block中采用了相同的技巧。在处理实际的输入事件时,刷子会再次被修改为捕捉到最近的值,显然,这不应该触发事件处理程序的另一次运行。