动态地将节点添加到D3树布局请求(切换时)

莫莫斯·莫比亚斯(Momos Morbias)

简介:我正在尝试扩展d3-树形布局。

我试图通过切换事件上的ajax / setTimeout添加新节点。

我已完成的工作:在同步添加新节点方面取得了成功:https : //jsfiddle.net/xfj875vc/1/

我只更改了代码的2部分:

更改1(添加了将新子项添加到没有子项的节点的添加方法): function addNewNode(d, item) { d._children = d._children || []; d._children = d._children.concat(item); }

更改2(单击以进行切换时调用addNewNode,我仅为没有chilren的节点添加新节点):

 var nodeEnter = node.enter().append("svg:g")
      .attr("class", "node")
      .attr("transform", function(d) { return "translate(" + source.y0 + "," + source.x0 + ")"; })
      .on("click", function(d) {

            // change start
            var newItem;

            if (!d._children || d._children.length === 0) {
                newItem = [
                    {
                        "name": "i am new",
                        "children": [
                            { "name": "i am new child 1"},
                            { "name": "i am new child 2"}
                        ]
                    }
                ];
                addNewNode(d, newItem);
            }
            // change end

            toggle(d); update(d);
        });

2个问题:

  1. 添加带有子节点的节点时,将其显示并扩展所有内容,应最小化子节点。
  2. 如果我试图将代码包装在setTimeout中,则会添加子项。但是,过渡和动画无法正常工作,d3还会扩展嵌套的子对象,您可以在此处看到它:

https://jsfiddle.net/xfj875vc/3/(尝试单击一次以上)

谢谢

西里尔·谢里安(Cyril Cherian)

首先你的方法

   function addNewNode(d, item) {
        d._children = d._children || [];
        d._children = d._children.concat(item);
    }
  • 我们必须在这里了解d._children has values when collapsedso d.children will be undefined反之亦然,扩展节点时。因此,我不确定您在上面的代码中尝试做什么。

  • 其次,这将放置一个d._children.concat(item); 数组内的数组。这是不期望的,因此我在下面的for循环中执行相同的操作。

本来应该:

function addNewNode(d, item) {
      item.forEach(function(i){
        if(d._children)
            d._children.push(i)//will add child to the closed node      
        else 
            d.children.push(i)//will add child to expanded node.
      })
}

接下来,我在数据中保留一个标志,以指示它不需要通过单击就通过Ajax加载。

{
 "name": "flare",
 "loaded" : true, //so this node flare will not be loaded on click via ajax
 "children": [
  {
   "name": "analytics",
   "loaded" : true,//so this node analytics will not be loaded on click via ajax
   "children": [...

最后,在我的点击函数中,仅当此标志未定义时,我才会加载。

.on("click", function(d) {

  if (d.loaded === undefined) {\\do ajax
    setTimeout(function() {
      var newItem;

      newItem = [{
        "name": "i am new",
        "children": [{
          "name": "i am new child 1"
        }, {
          "name": "i am new child 2"
        }]
      }];
      addNewNode(d, newItem);
      d.loaded = true;//mark it as loaded so it doesn't load next time
      console.log("called", d)

      toggle(d);
      update(d);

    }, 1000)
  } else {//already loaded so dont do ajax
      toggle(d);
      update(d);
  }
});

这里的工作代码

如果您希望折叠加载的节点。

您可以这样创建一个新节点:

      newItem = [{
        "name": "i am new",
        "children": [{
          "name": "i am new child 1"
        }, {
          "name": "i am new child 2"
        }]
      }];

而不是那样

      newItem = [{
        "name": "i am new",
        "_children": [{ //note its changed to _children to show collapsed
          "name": "i am new child 1"
        }, {
          "name": "i am new child 2"
        }]
      }];

这里的工作代码

希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动态地将视图添加到布局

来自分类Dev

动态地将xml布局添加到我当前的Activity布局中

来自分类Dev

如何动态地将 LinearLayoutCompat 视图添加到现有的 xml 布局?

来自分类Dev

如何动态地将按钮添加到视图以便布局宽度正常工作?

来自分类Dev

将iFrame添加到D3可折叠树插件上的每个节点

来自分类Dev

如何动态地将Image添加到ImageView?

来自分类Dev

动态地将超链接添加到gridview

来自分类Dev

动态地将数据添加到QTableView

来自分类Dev

动态地将标签添加到JTabbedPane

来自分类Dev

动态地将属性添加到类

来自分类Dev

动态地将内容添加到标签页

来自分类Dev

如何动态地将图像添加到imageView

来自分类Dev

动态地将元素添加到HTML页面

来自分类Dev

动态地将视图添加到RecyclerView

来自分类Dev

从具有切换节点的D3树布局创建jsTree

来自分类Dev

如何动态地将图像从URL的字符串数组添加到活动的scrollview线性布局

来自分类Dev

将“ON”/“OFF”文本添加到切换按钮

来自分类Dev

在d3js树布局中将类添加到根节点

来自分类Dev

将 cookie 添加到 jquery 切换视频背景切换器

来自分类Dev

在“强制”布局中将文本标签添加到d3节点

来自分类Dev

在“强制”布局中将文本标签添加到d3节点

来自分类Dev

如何将键盘布局小程序切换器添加到Fluxbox工具栏?

来自分类Dev

动态地将行添加到具有动态接收的列数的表中

来自分类Dev

如何动态地将QScrollArea添加到StackedWidget页面并向其中添加小部件?

来自分类Dev

如何动态地在滚动视图中将自定义布局添加到线性布局

来自分类Dev

如何动态地将类添加到焦点输入字段的父div?

来自分类Dev

如何动态地将新数组添加到现有数组中

来自分类Dev

如何动态地将行添加到特定的UITableView节?

来自分类Dev

是否可以从Java动态地将方法添加到Groovy基本脚本中?

Related 相关文章

  1. 1

    动态地将视图添加到布局

  2. 2

    动态地将xml布局添加到我当前的Activity布局中

  3. 3

    如何动态地将 LinearLayoutCompat 视图添加到现有的 xml 布局?

  4. 4

    如何动态地将按钮添加到视图以便布局宽度正常工作?

  5. 5

    将iFrame添加到D3可折叠树插件上的每个节点

  6. 6

    如何动态地将Image添加到ImageView?

  7. 7

    动态地将超链接添加到gridview

  8. 8

    动态地将数据添加到QTableView

  9. 9

    动态地将标签添加到JTabbedPane

  10. 10

    动态地将属性添加到类

  11. 11

    动态地将内容添加到标签页

  12. 12

    如何动态地将图像添加到imageView

  13. 13

    动态地将元素添加到HTML页面

  14. 14

    动态地将视图添加到RecyclerView

  15. 15

    从具有切换节点的D3树布局创建jsTree

  16. 16

    如何动态地将图像从URL的字符串数组添加到活动的scrollview线性布局

  17. 17

    将“ON”/“OFF”文本添加到切换按钮

  18. 18

    在d3js树布局中将类添加到根节点

  19. 19

    将 cookie 添加到 jquery 切换视频背景切换器

  20. 20

    在“强制”布局中将文本标签添加到d3节点

  21. 21

    在“强制”布局中将文本标签添加到d3节点

  22. 22

    如何将键盘布局小程序切换器添加到Fluxbox工具栏?

  23. 23

    动态地将行添加到具有动态接收的列数的表中

  24. 24

    如何动态地将QScrollArea添加到StackedWidget页面并向其中添加小部件?

  25. 25

    如何动态地在滚动视图中将自定义布局添加到线性布局

  26. 26

    如何动态地将类添加到焦点输入字段的父div?

  27. 27

    如何动态地将新数组添加到现有数组中

  28. 28

    如何动态地将行添加到特定的UITableView节?

  29. 29

    是否可以从Java动态地将方法添加到Groovy基本脚本中?

热门标签

归档