2016-07-21 12 views
1

Ich kopierte ein Beispiel aus dem Buch D3.js In Aktion für ein einfaches Balkendiagramm und bekomme einen Fehler, wenn ich versuche, es auszuführen.D3.js In Action, Codebeispiel funktioniert nicht

Console Fehler:

charts.js:3 Uncaught TypeError: Cannot read property 'linear' of undefined 

Der Code:

var yScale = d3.scale.linear().domain([0, 390]).range([0,100]); 

d3.select('svg') 
    .selectAll('rect') 
    .data([150,390,340,295]) 
    .enter() 
    .append('rect') 
    .attr('width', 50) 
    .attr('height', function(d) { return yScale(d); }) 
    .attr('x', function(d, i) { return i*60; }) 
    .attr('y', function(d) { return 100 - yScale(d); }) 
    .style('fill', 'rgb(104, 167, 207)'); 

Wenn ich die yScale Erklärung nach unten bewege ich die folgende Fehlermeldung erhalten:

charts.js:11 Uncaught TypeError: yScale is not a function 

Antwort

5

Sie sind am ehesten mit D3 v4, während das Beispiel auf v3 aufgebaut ist. Da v4 im Gegensatz zu v3 jetzt modular ist, wurden die Namensräume abgeflacht. Nach dem change log für die lineare Skala bedeutet dies:

Da d3.scale undefiniert ist, gibt es .linear keine Eigenschaft von ihm gelesen werden, damit der Fehler auf. Ändern Sie Ihren Code in

var yScale = d3.scaleLinear().domain([0, 390]).range([0,100]); 

um es zum Laufen zu bringen.

+0

danke, das hat den ersten Fehler behoben. Jetzt bekomme ich: Uncaught TypeError: yScale ist keine Funktion Gibt es eine aktualisierte Möglichkeit, yScale die Daten 'd' zu übergeben? –

+1

@RonI In deiner Frage hast du erwähnt, dass du die Deklaration nach unten verschiebst. Haben Sie es seitdem wieder über die Position gebracht, an der es zum ersten Mal benutzt wird? Wenn yScale noch nicht zugewiesen ist, ist es sicherlich keine Funktion, genauso wie der Fehler angegeben wurde – altocumulus