javascript - 来自 json 的 D3 树布局

标签 javascript d3.js

我正在开发一个允许动态创建树的 d3 项目。

这正确地创建了树,但是如果我将树保存为 json 并重新加载它,然后添加一些节点,它会完全弄乱树结构。

json 结构看起来没问题,我去掉了 d3 添加到数据中的属性:

var json = JSON.stringify(treeData,function( key, value) {
                    if( key == 'parent') { return value.name;}
                    else if( key == 'depth') { return undefined;}
                    else if( key == 'x') { return undefined;}
                    else if( key == 'y') { return undefined;}
                    else {return value;}
                    });

看起来 d3 正在退出从深度 0 开始的节点。

请在此处查看 fiddle :http://jsfiddle.net/z15825qu/

最佳答案

问题出在这里:

var node = select.data(nodes, function(d) 
                        { 
                            if(d.Type!=="e"){
                                d.ExpVal=function(){return CalcEV(d);}();
                            }
                            return d.id || (d.id = ++self.i);//this is the problem 
                        });

让Id生成随机

var node = select.data(nodes, function(d) 
                        { 
                            if(d.Type!=="e"){
                                d.ExpVal=function(){return CalcEV(d);}();
                            }
                            return d.id || (d.id = parseInt(Math.random()*100)); //make the id generation random
                        });

原因:

当您第一次绘制它时,localStorage 没有存储任何数据,因此当您执行 ++self.i 时,id 生成是唯一的。

现在在本地存储有值并从那里渲染的情况下。 添加了一个节点,++self.i。将生成已经存在的节点的 ID(因为它将从 0 开始)。因此一切都会出错,因为您有多个具有相同 ID 的节点。

工作代码 here

希望这对您有所帮助!

关于javascript - 来自 json 的 D3 树布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32970599/

相关文章:

d3.js - 如何在 Polymer.dart 元素中嵌入 D3 图表?

javascript - 如何通过 D3 重复和延迟对 API 的调用

javascript - 用纹理/图案填充图像

d3.js - 复杂的 d3.nest() 操作

d3.js - 在 y 轴 d3 上添加一条线

javascript - 是否可以编辑 svg :image styles in the browser?(使用 D3)

javascript - 结束最后一个视频youtube API后如何获取第一个视频

javascript - 如何在我自己的应用程序中包含对库的更改?

javascript - 如何在 db.get 之外获取 node-sqlite3 查询的结果?

javascript - 延迟 React onMouseOver 事件