Ext.jsTree 向子节点添加叶子节点
// 定义搜索节点树结构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 向子节点添加叶子节点的更多相关文章
- MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)
		背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有子节点(包含路径上的枝干节点和叶子节点) 枝干节点:如果一个节点下还有子节点,则为枝干节点. 叶子节点:如果一个节点下不再有子节点 ... 
- Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框
		Jquery EasyUI Combotree只能选择叶子节点且叶子节点有多选框 Jquery EasyUI Combotree单选框,Jquery EasyUI Combotree只能选择叶子节点 ... 
- 找出所有从根节点到叶子节点路径和等于n的路径并输出
		//找出所有从根节点到叶子节点路径和等于n的路径并输出 Stack<Node> stack = new Stack<Node>(); public void findPath( ... 
- 求二叉树的深度,从根节点到叶子节点的最大值,以及最大路径(python代码实现)
		首先定义一个节点类,包含三个成员变量,分别是节点值,左指针,右指针,如下代码所示: class Node(object): def __init__(self, value): self.value ... 
- Z-tree 统计每一父节点的叶子节点数(看这一篇就够了)
		最近刚走出校园的我找到了第一份工作,在入职考核中就遇见了一道Z-tree的试题 这道题目本身是不难的,但是我第一次接触这个插件而且还把解决问题的方向搞错了,弄的我好几天都很难受. 弄得我都开始怀疑人生 ... 
- 根节点到叶子节点路径之和为target
		//递归吧,但是在递归到底的条件上要判断好,比如说完整路径是到叶子节点,也就是说左右子节点都为空,并且这时候的root.val==target表示找到了一个list,再返回. 但是因为我并没有直接就用 ... 
- 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn)  高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点
		红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明 (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ... 
- MySQL 树形结构 根据指定节点 获取其所有叶子节点
		背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ... 
- LC: 404.左叶子节点
		计算给定二叉树的所有左叶子之和. 示例: / \ 9 20 / \ 15 7 ,所以返回 24 解析 我们需要找到这样的节点 属于叶子节点 属于父节点的左子节点 方法一:用栈,dfs遍历,用全局变量r ... 
随机推荐
- XML解析与xml和Map集合的互转
			1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ... 
- HTML+CSS基础学习标签代码
			HTML基础 一.HTML页面结构 1.HTML定义 (HTML)为超文本标记语言,是写给浏览器的语言, 目前网络上应用最广泛的语言,目前已经更新到HTML5,HTML添加了一些写的语义化标签,放弃了 ... 
- How To Install Docker On Ubuntu 18.04
			Docker is an increasingly popular software package that creates a container for application developm ... 
- Codeforces Round #589 (Div. 2)
			目录 Contest Info Solutions A. Distinct Digits B. Filling the Grid C. Primes and Multiplication D. Com ... 
- LibreOJ #116. 有源汇有上下界最大流
			二次联通门 : LibreOJ #116. 有源汇有上下界最大流 /* LibreOJ #116. 有源汇有上下界最大流 板子题 我也就会写写板子题了.. 写个板子第一个点还死活过不去... 只能打个 ... 
- CodeForces 750A New Year and Hurry
			#include<bits/stdc++.h> using namespace std; int main() { int n, k, i, sum; while(~scanf(" ... 
- python生成二维码(简易)
			首先要的配置: pillow image qrcode zxing 然后直接上代码: import PIL import qrcode # 实例化二维码生成类 qr = qrcode.QRCode( ... 
- Linux--系统调优
			建议看看:https://www.cnblogs.com/yinzhengjie/p/9994207.html 一.关闭swap交换分区 Linux swapoff命令用于关闭系统交换区(swap a ... 
- 微信小程序 使用字体图标 iconfont
			第一步:在阿里巴巴矢量图标库下载需要的图标 地址:https://www.iconfont.cn/ 添加至项目 第二步:打开在线代码 将在线代码复制 第三步:点击下载至本地下载图标 将下载的downl ... 
- 通过AS提交AndroidLibrary到JCenter仓库
			注意事项: //版本需要一致,如下版本对应gradle-4.4-all.zip dependencies { classpath 'com.android.tools.build:gradle:3.1 ... 
