这可能是一个 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);
我现在想添加一些转换,这需要使用 .on("click", change)。但是,在所有 d3 示例中,change 函数依赖于对当前范围内的变量的访问。如何访问与特定实例附带的图表对应的 AlmViz 实例?
注意:这已发布在 d3 Google 群组上,但似乎并没有引起太多关注,所以我想我会回到 STO。原帖在这里: https ://groups.google.com/forum/?fromgroups=#!topic/d3-js/1o4mYnMJZTA