Javascript 如何使用d3访问变量in/向回调传递参数

Javascript 如何使用d3访问变量in/向回调传递参数,javascript,d3.js,Javascript,D3.js,这可能是一个JS问题,可能比D3问题更多 我在一个页面上有几个D3可视化,都是从相同的代码构建的。为了拥有某种名称空间,我创建了一个类(JS中的一个函数),并对其进行实例化。如下所示: function AlmViz(params) { ... this.svg = this.chartDiv.append("svg") .attr("width", this.width + this.margin.left + this.margin.right)

这可能是一个JS问题,可能比D3问题更多

我在一个页面上有几个D3可视化,都是从相同的代码构建的。为了拥有某种名称空间,我创建了一个类(JS中的一个函数),并对其进行实例化。如下所示:

function AlmViz(params) {
    ... 
    this.svg = this.chartDiv.append("svg")
        .attr("width", this.width + this.margin.left + this.margin.right)
        .attr("height", this.height + this.margin.top + this.margin.bottom)
      .append("g")
        .attr("transform", "translate(" + this.margin.left + "," + this.margin.top + ")");
        ...
}

function loadData(viz) {
    ...   
    viz.svg.selectAll(".bar")
        .data(level_data)
      .enter().append("rect")
             ...
     ...
}

 // I loop here and call this several times
 // with different paramters, so I get a bunch of 
 // different graphs
var viz = new AlmViz(params);
loadData(viz);

 chartDiv.svg.append("a")
    .attr("href", "#")
    .text("to change click here")
    .on("click", change);
现在,我想添加一些转换,这需要使用that.on(“单击”,更改)。然而,在所有d3示例中,更改函数依赖于访问当前范围内的变量。如何访问与特定实例对应的图表对应的AlmViz实例

注:这篇文章已经发布在d3谷歌群组上,但似乎没有引起太多关注,所以我想我还是回到STO。原文如下:

您可以将当前状态作为参数传递给更改函数,如下所示:

.on("click", function() { change(viz); });

您可以将所有实例保存在一个数组/对象中。是的,我想到了这一点,但我仍然不知道如何使用onChange回调传入实例(或数组键)。我唯一的想法是使用链接中的属性(例如,上的id)并将其用作数组键。这似乎不是正确的方法,但也许它是正确的?那么,你到底想做什么?基本上,只需根据当前状态使用不同的对象调用
loadData
?loadData部分很好,我需要帮助的部分是如何添加“change”事件,以便进行一些转换。change函数需要使用其中一个AlmViz实例的当前状态。