Events 在d3.js中添加事件侦听器

Events 在d3.js中添加事件侦听器,events,d3.js,append,listener,add,Events,D3.js,Append,Listener,Add,我有一个简单的问题,但不幸的是我认为我做错了什么 我有一个生成多个独立图表的页面。我想为每个图表添加一个事件侦听器,它依赖于一个单选按钮集。例如,假设单选按钮[A、B、C]中有3个选项,根据选择的按钮,图表应显示不同的变量。每个图表都是使用AJAX调用异步生成的,其结构是一个可重用的图表(如下所述:) 我目前所做的是,这些图表创建了自己的事件侦听器,如下所示: d3.selectAll(".global-control").on("change.pie", readjustPie); 及 Re

我有一个简单的问题,但不幸的是我认为我做错了什么

我有一个生成多个独立图表的页面。我想为每个图表添加一个事件侦听器,它依赖于一个单选按钮集。例如,假设单选按钮[A、B、C]中有3个选项,根据选择的按钮,图表应显示不同的变量。每个图表都是使用AJAX调用异步生成的,其结构是一个可重用的图表(如下所述:)

我目前所做的是,这些图表创建了自己的事件侦听器,如下所示:

d3.selectAll(".global-control").on("change.pie", readjustPie);

RejustPie和RejustScatter都是不同“可重用图表”中的函数(例如pieChart()和ScatterChart())

显然,当执行最新代码时(图表是异步生成的),一个侦听器会被覆盖。我想做的不是在每个函数中添加事件侦听器,而是能够附加一个侦听器。我试过选择

d3.selectAll(".global-control")
.on("change.pie", readjustPie)
.on("change.scatter", readjustScatter);
但它不起作用,因为找不到函数(重新调整*)(显然,它们不是全局函数)

这样的事件是否可能发生

如果这个问题很愚蠢,我很抱歉,但是我会感谢你的帮助

最好的,
Nikos

我同意,如果您想让代码模块化和可测试,那么可重用图表不应该知道表单控件。我将在charts API上公开“重新调整派”,并从全局控制事件调用它,类似于:

d3.selectAll(".global-control")
  .on("change.pie", changePieValue)

function changePieValue(_ctrl){
  var ctrlValue = _ctrl.grabYourValueHere;
  pieChart.readjustPie(_ctrlValue);
  d3.select('#pie-chart-container1')
    .call(pieChart)
}

这里有一个例子:

我同意,如果您想让代码模块化和可测试,那么可重用图表不应该知道表单控件。我将在charts API上公开“重新调整派”,并从全局控制事件调用它,类似于:

d3.selectAll(".global-control")
  .on("change.pie", changePieValue)

function changePieValue(_ctrl){
  var ctrlValue = _ctrl.grabYourValueHere;
  pieChart.readjustPie(_ctrlValue);
  d3.select('#pie-chart-container1')
    .call(pieChart)
}
以下是一个例子: