d3:我的代码将创建1个图表但不会创建2个图表

时间:2014-09-12 15:52:34

标签: javascript jquery d3.js

我想多次调用我的d3代码,并将输出显示在我网站的不同位置。我将代码放在一个函数(chart)中,我试图调用它两次并传递不同的参数。

http://jsfiddle.net/5rk6g234/

我的d3代码中出现了一个奇怪的Uncaught TypeError: undefined is not a function错误。 如果我只调用一次函数,但代码运行正常,但我会尽快:

chart(dj, "#c"); //dj is my data, #c is the div where I want the chart
chart(dj, "#e"); //dj is my data, #e is the div where I want the chart

它抛出此错误并且不会制作第二张图表。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

此代码块位于chart()内:

data.forEach(function(d){
    d.d_string = parseDate(d.d_string);
    d.c_string = +d.c_string;
  });

第一次运行时,它会做你期望的;它会将d.d_string转换为Date个对象。第二次,d.d_string已经是一个日期,而d3的日期解析器只需要一个字符串,所以它出错了。

如果您将该块移到chart之外(并将data重命名为dj),它会正常工作:

var parseDate = d3.time.format("%Y-%m-%d").parse;
dj.forEach(function(d){
  d.d_string = parseDate(d.d_string);
  d.c_string = +d.c_string;
});

The modified fiddle