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.json("graph.json", function(json) {...});ここで、D3をレンダリングするときに、ローカルファイル(またはURL)ではなくメモリ内オブジェクトを参照するように呼び出しを更新する必要があります。しかし、私が試したすべてが私のhtml/javascriptを壊します。たとえば、を設定しようとしましたvar dataset = <%= raw(@myInMemoryObject) %>;が、これは割り当てには機能します(データセットに対してアラートを実行しました)が、それを使用するためのD3コードを取得できません。

インメモリオブジェクトを使用するためにd3.json呼び出しを置き換えるにはどうすればよいですか?

ありがとうございました、

ダミアン

4

1 に答える 1

1

たとえば、var dataset = <%= raw(@myInMemoryObject) %>;を使用するというあなたのアイデア。正しい方法ですが、オブジェクトを正しい形式に準備する必要があります。

リンクで指定されたノードは、ノード配列内のノードへの数値参照である必要があります。最初は0、2番目は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 に答える