Wenn Sie, ohne dabei irgendwelche Asynchron-Operationen zur Verfügung Ihrer Daten haben, dann können Sie dies wie folgt erreichen, ersetzen Sie die d3.json
Linie
d3.json("sankey-formatted.json", function(error, graph) {
// ...
})
Mit Ihrer benutzerdefinierten Ladefunktion z.B
loadData(function (graph) {
// contents of the function passed to d3.json
})
Die Funktion loadData
nun eine Funktion als Parameter empfängt, die mit dem Datum Sie haben aufgerufen werden sollen, die ein einfaches JS-Objekt sein können
function loadData(cb) {
var data = {
"nodes":[
{"node":0,"name":"node0"},
{"node":1,"name":"node1"},
{"node":2,"name":"node2"},
{"node":3,"name":"node3"},
{"node":4,"name":"node4"}
],
"links":[
{"source":0,"target":2,"value":2},
{"source":1,"target":2,"value":2},
{"source":1,"target":3,"value":2},
{"source":0,"target":4,"value":2},
{"source":2,"target":3,"value":2},
{"source":2,"target":4,"value":2},
{"source":3,"target":4,"value":4}
]}
// invoke the function passed as an argument
cb(data)
}
dies auf die harte Art und Weise sein würde, die leicht Weg wäre, diese Funktion loszuwerden und eine Variable zu haben, die die Daten direkt hält
var graph = { /* the nodes and links are here */ }
// contents of the function passed to d3.json
var graph = { /* the nodes and links are here */ }
// contents of the function passed to d3.json