Vergleichen / Vergleichen neuer Daten mit früheren Daten auf d3.js update

8

Ich möchte die Differenz zwischen dem aktuellen Datensatz und dem vorherigen Datensatz darstellen, wie vom Client berechnet.

Stellen Sie sich vor, ich habe bereits drei Kreise, die an die Daten [1, 2, 3] gebunden sind. Jetzt möchte ich die Daten aktualisieren und etwas basierend auf dem Unterschied zwischen den neuen Werten und den alten tun?

%Vor%

Hier ist ein JSFiddle mit dem obigen Code in einem Beispiel.

    
LondonRob 01.05.2014, 14:00
quelle

2 Antworten

13

Sie haben zwei Möglichkeiten, die an ein Element angehängten alten Daten zu speichern, um Änderungen nach einem neuen Datenbeitritt zu identifizieren.

Die erste Option ist, wie Sie vorgeschlagen haben, die Verwendung von Datenattributen. Diese SO Q & A beschreibt diesen Ansatz . Dinge zu beachten:

  • all Ihre Datenwerte werden in Strings
  • umgewandelt
  • Sie benötigen einen separaten Methodenaufruf / ein separates Attribut für jeden Aspekt der Daten
  • Sie manipulieren das DOM, damit es die Dinge verlangsamen kann, wenn Sie für jedes
  • viele Elemente oder viele Daten haben
  • die Daten sind jetzt Teil des DOM, können also zusammen mit dem Image gespeichert oder von anderen Scripts aufgerufen werden

Die zweite Option besteht darin, die Daten als JavaScript-Eigenschaft des DOM-Objekts für das Element zu speichern, genauso wie d3 speichert die aktiven Daten als __data__ -Eigenschaft . Ich habe diese Methode in diesem Forumbeitrag besprochen.

Der allgemeine Ansatz:

%Vor%

Sie können natürlich einen beliebigen Namen für die alte Dateneigenschaft verwenden, es ist nur Konvention, eine Menge "_" -Zeichen um ihn herum zu werfen, um zu verhindern, dass die nativen DOM-Eigenschaften des Browsers durcheinander gebracht werden.

    
AmeliaBR 01.05.2014, 15:59
quelle
6

Ab D3 v4 können Sie die integrierte Unterstützung für lokale Variablen . Die interne Implementierung entspricht im Wesentlichen der Antwort von AmeliaBR , aber Sie müssen nicht mehr alte Daten speichern allein. Wenn Sie d3.local() verwenden, können Sie set einen Wert für einen bestimmten DOM-Knoten, daher der Name local . Im unteren Ausschnitt geschieht dies für jeden Kreis durch die Zeile

%Vor%

Sie können später den Wert für einen bestimmten Knoten abrufen gespeichert auf:

%Vor%

Dieser vollständige Code könnte etwa so aussehen:

%Vor% %Vor%
    
altocumulus 27.12.2016 14:20
quelle

Tags und Links