2016-05-06 10 views
0

Ich folge diesem Beispiel:D3.js Hinzufügen ziehbar Kreisen funktioniert nicht, wenn einzelne Zugabe

https://bl.ocks.org/mbostock/6123708

das, was ich nicht verstehen kann, ist, wie ich möglicherweise neue Kreisen hinzufügen kann, wenn eine Schaltfläche geklickt wird, zum Beispiel:

d3.tsv("dots.tsv", dottype, function (error, dots) { 
    container.append("g") 
       .attr("class", "dot") 
       .selectAll("circle") 
       .data(dots) 
       .enter().append("circle") 
       .attr("r", 5) 
       .attr("cx", function (d) { 
        return d.x; 
       }) 
       .attr("cy", function (d) { 
        return d.y; 
       }) 
       .call(drag); 
     }); 

     function dottype(d) { 
      d.x = +d.x; 
      d.y = +d.y; 
      return d; 
     } 
self.addNode = function() { 
      container.append('g') 
       .attr('class', 'dot') 
       .append('circle') 
       .attr('r', 35) 
       .attr('cx', (i * 100) + cx) 
       .attr('cy', (i * 100) + cy) 
       //.style('fill', 'purple') 
       .call(drag); 
      i++; 
     }; 

der erste Teil das gleiche wie das Beispiel ist, habe ich dann eine Funktion einen einzigen Kreis im Inneren des Behälters zu addieren, ist das Problem, dass, wenn ich die neue hinzugefügt Kreis ziehen ich nur die bewegen externes G-Element, so bewegt sich jeder o der Kreis zusammen.

Ich kann nicht verstehen, warum, da die Funktionen die gleichen sind (ich sogar den Stil ‚füllen‘ entfernt sicher sein)

+0

Können Sie Ihre Recherchen darüber teilen, wie Sie einem D3-Layout neue Knoten hinzufügen? Beispiel: https://bl.ocks.org/mbostock/1095795. Sie müssen Ihre Grafikdaten aktualisieren. Was Sie tun, ist nur ein HTML-Element zu Ihrem Container-Element hinzufügen und wird weg sein, nachdem d3 rendert Ihre neue Svg. – echonax

+0

Ich habe genau das getan, was du gesagt hast, ich war mir eines bestimmten Layouts nicht bewusst, weil ich keine d3-Funktion gesehen habe, nur die tsv, um die Daten zu lesen. Vielleicht fehlt mir etwas? Bin ich völlig falsch mit meinem Code? – Gianmarco

Antwort

1

Sie geben Ihr Layout ein Datum in .data(dots) aber, wenn Sie einen Knoten hinzufügen In Ihrer AddNode-Funktion sind dem Layout diese neuen Daten nicht bekannt. Sie möchten die neuen Knotendaten zu Ihrem Datenarray (Punkte) hinzufügen/schieben und die Zeichenfunktion aufrufen.

Daher sollten Sie den Code unter d3.tsv in eine Funktion schneiden, um sie erneut aufzurufen, wenn Sie die Daten aktualisieren.

+1

Wenn Sie eine Geige oder Plunkr aufstellen können, können wir Ihnen weiterhelfen. – echonax

+0

Ich speichere nun meine Daten in eine Var, die aktualisiert wird (zum Beispiel 'dots.push') und wähle dannAll.enter.append (re-rendered) – Gianmarco

Verwandte Themen