NV.D3无法读取属性'长度'未定义的

时间:2016-01-25 21:50:46

标签: d3.js nvd3.js

我尝试使用基于CSV数据的读取来构建简单的条形图。现在我只是在我的脚本中包含数据。当我尝试运行它时,我收到此错误:

Uncaught TypeError: Cannot read property 'length' of undefined

这是脚本:

var data;

function showChart() {
  var theCsv =
    "name,value\n" +
    "Foo,43\n" +
    "bar,76\n" +
    "foo2,88\n" +
    "bar2,59\n";
  var csvString;
  var content = [{
    key: "totals",
    values: []
  }];

  var input = d3.csv.parse(theCsv, function(d) {
    return {
      name: d.name,
      value: d.value
    };
  });

nv.addGraph(function() {
    var chart = nv.models.discreteBarChart()
      .x(function(d) {
        return d.name
      })
      .y(function(d) {
        return d.value
      })
      /*.showvalues(true)*/

    d3.select('#chart svg')
      .datum(input)
      .transition(1000)
      .call(chart)

    nv.utils.windowResize(chart.update);
    return chart;

  });

  fileDisplayArea.innerText = csvString
}

据调试我可以看出,错误发生在.call(chart)行,但我不知道问题是什么。我找到了几个关于D3版本的链接,但我尝试了几个不同的链接,但我仍然收到错误。

这里是JSFiddle

1 个答案:

答案 0 :(得分:4)

看起来您需要将数据包装到另一个对象中:

var input = d3.csv.parse(theCsv, function(d) {
    return {
      name: d.name,
      value: d.value
    };
  });

// get it into the form required by `nvd3`
input = [{ key: "Some Key", values: input }]

这里有一个updated fiddle,上面添加了一条额外的行。

我无法找到关于为什么的任何文档,但这似乎是使用的模式(基于this example on the site)。