1

这似乎应该很简单,但我已经花了几个小时没有任何成功。

http://bl.ocks.org/mbostock/950642上的 D3 图示例为例。该示例使用名为 graph.json 的本地文件。我已经设置了一个 Rails 应用程序来提供类似的图表,但是我不想编写 JSON 文件。相反,我将节点和链接生成到一个对象中,例如:

{"nodes":[{"node_type":"Person","name":"Damien","id":"damien_person"}, {"node_type":"Person","name":"Grant","id":"grant_person"}}],
"links":[{"source":"damien_person","target":"grant_person","label":"Friends"}} 

现在,当我渲染 D3 时,我需要更新调用d3.json("graph.json", function(json) {...});以引用我的内存对象而不是本地文件(或 url)。但是,我尝试过的一切都破坏了我的 html/javascript。例如,我尝试设置var dataset = <%= raw(@myInMemoryObject) %>;, 并且它适用于分配(我在数据集上做了一个警报),但是我无法让 D3 代码使用它。

如何替换 d3.json 调用以使用我的内存对象?

谢谢,

达米安

4

1 回答 1

1

您使用的想法,例如var dataset = <%= raw(@myInMemoryObject) %>,是正确的方法,但您需要准备对象以采用正确的格式。

链接中指定的节点需要是对节点数组中节点的数字引用,例如。0代表第一,1代表第二

var json ={
    "nodes":[{"name":"Damien","id":"a"}, {"name":"Bob","id":"b"}],
    "links":[{"source":0, "target":1,"value":1}]
}

或链接到使节点本身的实际对象:

var a = {"name":"Damien","id":"a"};
var b = {"name":"Bob","id":"b"}
var json ={
    "nodes":[a,b],
    "links":[{"source":a,"target":b,"value":1}]
};

相关讨论在这里:https ://groups.google.com/forum/?fromgroups=#!topic/d3-js/LWuhBeEipz4

此处示例:http: //jsfiddle.net/5A9eV/1/

于 2013-03-27T08:25:58.327 回答