2016-03-28 6 views
0

In meinen Daten für Kraft-Layout-Attribut Ich habeD3 Zugriff auf Array in JSON-Objekt

"nodes":[ 
    {"id":"0", "name":"A", 
    "isListedIn":["USSDN","Canadian list"] 
    }, 

Normalerweise würde ich binde es dann zu D3 Auswahl wie

d3.select(body).selectAll(".node").data(graph.nodes).enter() 
    .append("image") 
    .attr("name") function(d) return d.name) 
    .attr("isListedIn",function(d) return d.isListedIn) 

Wo ich versuche zu bekommen es aus

var listList=d3.select("#listList").append("ul") 
     .data(listList) 
     .enter() 
     .append("li") 
     .text(function(d){return d}) 

Aber d.isListedIn funktioniert nicht. Die Sache, die ich versuchte, ist, wenn der Benutzer auf 1 Knoten klickt -> Ich kann den Wert von isListedIn als ein Array abrufen. Wie kann ich das erreichen?

+2

Dies ist ein seltsamer Code 'd3.select (body) .data (graph.nodes) .enter() .attr (" name ") function (d) return d.name)' Sie fügen keine Sache an . Ich frage mich, ob das Kraftdiagramm funktioniert. Kannst du eine Arbeitsgeige posten? – Cyril

+0

Ja, es gab Fehler im Code. Ich werde es jetzt bearbeiten. Aber der Punkt ist, dass ich nicht wissen, wie auf Array geschachtelt innerhalb d.islistedIn –

+1

Offenbar sollte dies funktionieren kann innerhalb der Funktion können Sie Konsole zu überprüfen, ob d hat "isListedIn" ... etwas wie diese '.attr (" isListedIn ", Funktion (d) {console.log (d); Rückgabe d.islistedIn)}' – Cyril

Antwort

1

Was genau versuchen Sie zu erreichen?

Es ist nicht wirklich sinnvoll, ein Attribut hinzuzufügen, um die isListedIn-Liste auf Ihren Knoten zu speichern, nur um sie später wieder abzurufen, da d3 das bereits für Sie erledigt. Wenn Sie die Daten für ein DOM-Element abrufen möchten, können Sie entweder d3.select('#el').data()[0]['isListedIn'] oder d3.select('#el').each(function(d) { console.log(d.isListedIn); }); verwenden, je nachdem, was Sie damit machen möchten.