// 定义搜索节点树结构Store

const nodeStore = Ext.create('Ext.data.TreeStore',
{
  autoLoad : true,
  id : 'nodeStoreTreeId',
  fields : ['index', 'nodeId', 'name_or_index', 'to_node', 'type'],
  proxy : {
    type : 'memory',
    reader : {
      type : 'json',
    }
  },
  root : {
    text : '根节点',
    expanded : true
  },
  folderSort : true,
});

// 搜索子节点展示树结构面板

const nodeTreePanel = Ext.create('Ext.tree.TreePanel',{

  title : '子节点树结构图',
  id : `${data.title}NodeTreeId`,
  width : '45%',
  height : 400,
  region : 'east',
  collapsed : false,
  collapsible : false,
  closeAction : 'hide',
  useArrows : true,
  rootVisible : false,
  autoScroll : true,
  autoShow : true,
  animate : true,
  store : nodeStore,

  listeners   : {  // 主要就是这个监听事件

    // 展开之后触发 afteritemexpand

    'afteritemexpand' : function(itme, index)
    {

      // 准备的参数或者其他数据,我这边需要一个nodeId

      const nodeId = itme.data.nodeId;

      // 通过这个nodeId获得当前节点下的子节点数据。

      const Result = heapNodeSerialize(jsHeapSnapShot[data.title], nodeId);

      // 处理添加新的子节点
      for (let i = 0; i < itme.parentNode.childNodes.length; i++)
      {
        const everyChildNode = itme.parentNode.childNodes[i];
        const everyChildNodeId = everyChildNode.data.nodeId;
        if (everyChildNodeId == nodeId)
        {
          // 首次展开需要添加子节点。
          for (let j = 0; j < everyChildNode.parentNode.childNodes.length; j++)
          {
            const everyGrandsonNode = everyChildNode.parentNode.childNodes[j];
            // 已经加载过子节点的值,后面再次展开无需再加载。
            if ((everyGrandsonNode.data.nodeId == nodeId) && everyGrandsonNode.childNodes.length == 0)
            {
              // 将叶子节点数据设置到子节点里面。

              // 前面都是数据处理,这个才是向子节点添加子节点的地方。
              everyChildNode.appendChild(Result);
            }
          }
        }
      } 

    }

  }

});

// 效果图

                       图·1

// 期间遇到的问题

1、之前将使用的是itemclick事件,后来换成了 afteritemexpand 点击展开后触发事件,监听itemclick事件

   存在使用不怎么友好的问题。

2、当遇到子节点被重复展开触发事件,会出现前面其他子节点同样的子节点和现在的子节点一样的节点

   数据会出现乱窜问题。(这里可能有点绕-看下图·2):决解方案:在已经展开的节点上面做记录,如果

重复展开并且后面的数据是一样的,可直接return。这样避免了数据乱窜的问题。

                      图·2

Ext.jsTree 向子节点添加叶子节点的更多相关文章

  1. MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ...

  2. Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框

    Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框 Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点 ...

  3. 找出所有从根节点到叶子节点路径和等于n的路径并输出

    //找出所有从根节点到叶子节点路径和等于n的路径并输出 Stack<Node> stack = new Stack<Node>(); public void findPath( ...

  4. 求二叉树的深度,从根节点到叶子节点的最大值,以及最大路径(python代码实现)

    首先定义一个节点类,包含三个成员变量,分别是节点值,左指针,右指针,如下代码所示: class Node(object): def __init__(self, value): self.value ...

  5. Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)

    最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ...

  6. 根节点到叶子节点路径之和为target

    //递归吧,但是在递归到底的条件上要判断好,比如说完整路径是到叶子节点,也就是说左右子节点都为空,并且这时候的root.val==target表示找到了一个list,再返回. 但是因为我并没有直接就用 ...

  7. 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点

    红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明   (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...

  8. MySQL 树形结构 根据指定节点 获取其所有叶子节点

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...

  9. LC: 404.左叶子节点

    计算给定二叉树的所有左叶子之和. 示例: / \ 9 20 / \ 15 7 ,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父节点的左子节点 方法一:用栈,dfs遍历,用全局变量r ...

随机推荐

  1. SQL数据库调优

    1.使用With As做数据库递归,调优树形表结构 例如:设计表结构简化如:ID.ParentID.Name:这里的ParentID就是这个表本身的某个ID WITH cte AS ( UNION A ...

  2. C++构造函数的default和delete

    C++11中,当类中含有不能默认初始化的成员变量时,可以禁止默认构造函数的生成, myClass()=delete;//表示删除默认构造函数 myClass()=default;//表示默认存在构造函 ...

  3. php cookie 操作

    创建 cookie <?php setcookie(); ?> 取回 Cookie 的值 <?php // Print a cookie echo $_COOKIE["us ...

  4. Codeforces Round #566 (Div. 2)题解

    时间\(9.05\)好评 A Filling Shapes 宽度为\(3\),不能横向填 考虑纵向填,长度为\(2\)为一块,填法有两种 如果长度为奇数则显然无解,否则\(2^{n/2}\) B Pl ...

  5. JavaBean转Map

    1.需要的jar包 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava ...

  6. 小程序开发--WePy框架

    现如今mvvm框架如此火热,其核心思想即js逻辑层不直接操作DOM,只改变组件状态:而视图层则通过模板template进行渲染. 1.WePy项目的目录结构 ├── dist 小程序运行代码目录 ├─ ...

  7. jQuery Cookie (内附 上百行的中文使用手册,与 所有的注释中文翻译)

    jQuery Cookie (内附 上百行的中文使用手册,与 所有的注释中文翻译) 博主亲自翻译. 大家多多捧场. 更多资源请点击"查看TA 的资源" .全场通通 2积分. htt ...

  8. python中的with的用法,上下文管理器

    with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和 资源分配释放相关代码统统去掉,简化try….excep ...

  9. linux redis 设置密码:

    在服务器上,这里以linux服务器为例,为redis配置密码. 1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redi ...

  10. Idea 运行测试NoSuchMethodError Junit5

    1.背景 环境: macOS 10.13.4 idea: 2016.3 springboot 版本: 2.2.2.RELEASE pom依赖 <dependencies> <depe ...