D3树布局从json
D3 tree layout from json
我正在做一个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开始退出节点。
请参阅此处: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没有数据存储,所以id生成是唯一的,当你做++self.i。
现在在localstorage有值的情况下它从那里被渲染。添加一个节点,++self.i。将生成已经存在的节点的id(因为它将从0开始)。因此,由于您有多个具有相同id的节点,因此一切都出错了。
这里的工作代码
希望这对你有帮助!
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 使用agility.js进行页面布局和合成
- jQuery匹配JSON对象的部分文本
- 在循环中分配json值时,值被覆盖
- 需要帮助设置json数组
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- Javascript-如何读取json文件中的列并将其保存在Javascript数组中
- 使用JQuery解析JSON嵌套数组
- 如何从 JSON 扩展子项,单击父级 - D3.Js - 强制定向布局后加载数据
- d3包布局中的Json格式问题
- 强制可折叠布局中的分布式 json 加载
- 从JSON数据构建一个表布局(代码改进)
- 使用json中的动态布局
- PHP JSON响应包括HTML布局
- D3树布局从json
- 创建从JSON到HTML的布局
- JSON对象数组中的网格布局
- D3, JSON,图形,强制布局,数据更新,未完成重绘,拖动