1

我正在遵循Mike Bostock 的可重用图表模式- 使用 getter/setter 关闭。但不知何故,当我用新属性实例化一个新图表对象时,现有图表正在使用这些属性进行更新:

var chart1 = new StackedAreaChart();
d3.select('#chart1')
    .data([data])
    .call(chart1);     

// a new chart - whose properties end up in chart1!
var chart2 = new StackedAreaChart().colors(['green', 'blue']);

这是一个示例:http: //jsfiddle.net/samselikoff/YZ6Ea/3/。调整窗口大小以查看重新渲染的第一个图表,带有时尚但出乎意料的绿色色调。

我对此感到困惑。我怀疑(1)我的 setter 正在改变实际的“构造函数”,并且(2)不知何故chart1实际上是对这个构造函数的引用,而不是像我想的那样成为它的一个单独实例。

我正在考虑使用this.margin = ...而不是var margin =,但由于这是我想首先在这里发布的建议模式。我错过了什么?

4

1 回答 1

1

如果您遵循 Mike 的教程,则不应new在创建图表时使用:

var chart1 = StackedAreaChart();

d3.select('#chart1')
  .data([data])
  .call(chart1);

StackedAreaChart将返回一个函数,当数据绑定时,该函数将为选择中的每个元素调用一次。

于 2013-06-06T15:58:29.187 回答