D3 のフォース グラフを使用してデータ ドリブン ディスプレイを作成しています。
ajax を介してサーバー データからノードとリンクを提供します。
D3 Force Layoutモデルには、関数を介してリンク距離を設定できる関数があります。この関数をデータベースに保存するか、少なくともサーバー側で生成したいと思います。
簡単な例を次に示します。
force
.gravity(json_data.gravity || 0.15)
.charge(-150 + json_data.nodes.length)
.nodes(json_data.nodes)
.links(json_data.links)
.linkDistance(function (link, index) {
if (index % 2)
return 30;
return 50;
})
.start();
Charge や linkDistance などのフィールドについては、面倒な作業をサーバー側で行ってもらいたいと思っています。
これを達成するための「最良の」方法は何ですか?Evalで解決できる可能性があることは理解していますが、ほとんどの投稿はそれを避けると言っています..
考え?
編集:
これは私が保存しようとしているものです
"function (link, index) { if (index % 2) return 30; return 50;"
"function (link, index) { if (index % 3 ==1) return 30; if (index % 3==2) return 40; return 50;"
撮ったのはこちら。
サーバ側 :
public JsonGraphDTO(int Id, UnitRepository repository) {
gravity = 0.15;
linkDistance = "return 40;";
...
クライアント側の処理:
var fn = new Function('lnk','index',json_data.linkDistance);
force
.gravity(json_data.gravity || 0.15)
.charge(-150 + json_data.nodes.length)
.nodes(json_data.nodes)
.links(json_data.links)
.linkDistance(fn)
.start();