Sto utilizzando uno degli esempi di layout forza (http://bl.ocks.org/1153292) per mostrare una rete sul mio sito web.Come aggiornare gli elementi del layout di forza D3 quando i dati sottostanti cambiano
Consente all'utente di scegliere il tipo di collegamenti da visualizzare in qualsiasi momento. Ho notato che quando scelgo di vedere il tipo di collegamento A, quindi aggiungo il tipo di collegamento B e quindi rimuovo il tipo di collegamento A i collegamenti rimanenti di tipo B sono presentati con i colori A.
Questo è il codice che viene eseguito per aggiungere i collegamenti al diagramma svg. Sto modificando l'array this.links
aggiungendo e rimuovendo i collegamenti da esso. Come potete vedere ho impostato l'attributo di classe, ma non è l'aggiornamento - rimane di tipo di collegamento A.
var path = svg.append("svg:g")
.selectAll("path")
.data(this.links)
.enter()
.append("svg:path")
.attr("class", function(d) { return "link " + d.type; })
.attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
Attualmente lavoro a questo problema aggiornando l'attributo class all'interno della funzione tick ma questo fuori rotta causa molto lavoro non necessario.
Ho letto che l'operazione di invio restituisce una selezione unita degli elementi esistenti e anche di quelli nuovi in modo che l'operazione attr aggiorni quella esistente e imposta quella nuova.
Cosa mi manca?
Ido, so che questo è un vecchio post, ma credo che sto vivendo lo stesso problema che eri, e ancora non capisco questa soluzione. Potresti spiegare come funziona - come risolve il tuo problema originale? Grazie. – Mars
La soluzione funziona perché gli aggiornamenti attr di cx e cy sono al di fuori del contesto enter(), quindi si verificano ogni volta. Nel codice originale, le funzioni attr sono chiamate all'interno del contesto enter(), quindi vengono create una sola volta in base all'identità dell'oggetto. Quello che per me è stato conoscere le funzioni chiave come secondo argomento di data(): http://bost.ocks.org/mike/constancy/ – velotron