TreePanel树形节点不收缩刷新

2023-11-18

TreePanel树形节点不收缩刷新

 

遇到的问题

      在使用Ext树形组件的时候,下层节点的刷新,总是需要下层节点全部搜索然后再展开,如果需要实时的从后台获取数据,改变某些节点的text或者icon时,就显得不够优雅了。

解决方案

      负责树形组件TreePanle的TreeLoader是负责获取数据的,集成该类,然后在除第一次刷新之后的加载,将获取后的数据(比如节点的text、icon)更改到现有节点上,就可以很好的完成不收缩刷新

代码

/****************************************************
 * goal:为了让树的节点内容更新(目前包括text iconCls)
 * 而不让树形下层节点收缩带来的更好的用户体验
 * disadvantage:不能增删节点
 * createDate: 2009.09.24
 * author:	LXL
 *****************************************************/

Ext.namespace('SMN.ux.TreeLoader');


SMN.ux.TreeLoader = function(config) {
	config = config || {};
	SMN.ux.TreeLoader.prototype.processResponse = function(response, node, callback){
		var json = response.responseText;
		try {
            var o = response.responseData || Ext.util.JSON.decode(json);
			node.beginUpdate();
			var responseNodes = o;
			var treeNodes = node.childNodes;
			if (treeNodes.length == 0) {
				//	第一次加载
				for(var i = 0, len = responseNodes.length; i < len; i++){
	                var n = this.createNode(responseNodes[i]);
	                if(n){
	                    node.appendChild(n);
	                }
	            }
			} else {
				//	以后加载
				for (var i = 0; i < treeNodes.length; i++) {
					var treeNode = treeNodes[i];
					for (var j = 0; j < responseNodes.length; j++) {
						var responseNode = responseNodes[j];
						if (treeNode.attributes.id == responseNode.id) {
							//	同一个节点
							//	更新text
							treeNode.setText(responseNode.text);
							//	更新iconCls
							treeNode.getUI().getIconEl().className = 'x-tree-node-icon' + ' ' + responseNode.iconCls;
						}
					}
				}
			}
			node.endUpdate();
            if(typeof callback == "function"){
                callback(this, node);
            }
        }catch(e){
            this.handleFailure(response);
        }
	};
	SMN.ux.TreeLoader.prototype.load = function(node, callback){
//		Ext.log('into Ext.ux.TreeLoader.prototype.load');
		if(this.doPreload(node)){ // preloaded json children
            if(typeof callback == "function"){
                callback();
            }
        }else if(this.dataUrl||this.url){
            this.requestData(node, callback);
        }
	};
	SMN.ux.TreeLoader.superclass.constructor.call(this, config);
}
Ext.extend(SMN.ux.TreeLoader, Ext.tree.TreeLoader);

缺点和解决方案

       当TreeLoader从后台获取的下层节点不再是目前的节点数量时,比如多了一个孩子节点或者少了一个孩子节点,以上代码是不能完成该功能的,所以可以增加if分支,从后台获取数据后,先比较下层孩子节点数据,遍历节点ID,将需要删除的孩子节点删除,多出来的孩子节点增加上,其他的更新text和icon。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TreePanel树形节点不收缩刷新 的相关文章

  • 如何使用 LinkedIn javascript sdk 检索包括所有字段的职位列表?

    我想要获取 LinkedIn 会员在其个人资料中输入的每个职位的 ID 头衔 摘要 开始日期 结束日期 当前状态和公司名称 我测试了一个查询休息控制台 https apigee com console linkedin我得到了想要的结果 查
  • 零作为 IIFE 中的第一个参数[重复]

    这个问题在这里已经有答案了 In babeljs v6 5 1 class Foo 编译为 use strict var classCallCheck2 require babel runtime helpers classCallChec
  • HTML5 服务器端事件:EventSource 与包装的 WebSocket

    HTML5 服务器发送事件 SSE API 是否只是 HTML5 WebSocket 之上的受限制的 基于事件的 API 在我看来 一个EventSource只是一个WebSocket that Cannot send data 使用tex
  • JavaScript 变量赋值与 OR 对比 if 检查[重复]

    这个问题在这里已经有答案了 在 JavaScript 中 我最近意识到你可以使用 OR 赋值的逻辑运算符 我想知道这是否被认为是不好的做法 特别是 我有一些具有可选数组输入的函数 如果输入是null or undefined我应该将它设置为
  • 从未定义解构时避免错误

    可以说我有这个代码 const x y point Babel 会将其变成 var point point x point x y point y 这很好 但是如果点未定义怎么办 现在我得到一个错误 Cannot read property
  • 在 Perl 中,如何将一个函数作为另一个函数的参数传递?

    我编写了以下 Perl 类 package Menu use strict my MENU ITEMS my HEADER Pick one of the options below n my INPUT REQUEST Type your
  • 在 Angular2 项目中集成 Treant-js

    我正在尝试在 Angular2 项目中使用 treant js 但我正在努力解决如何正确集成它的问题 我有一个工作正常的 JavaScript HTML 示例 我正在尝试在 Angular2 中工作 我创建了一个组件 从 npm 添加了 t
  • 具有行组的 JQuery 斑马条纹表

    我通常将斑马条纹表行设置为奇数 偶数 如下所示 效果很好 table tbody tr visible even this addClass even table tbody tr visible odd this addClass odd
  • 在 JavaScript 中比较表单中的两个数字

    当我尝试比较不同的数字时 数字发生变化 但文本部分保持不变 这只发生在较大 较小的情况下 而不会发生在 NaN 或相等的情况下 这是我的代码 function check var a document getElementById a va
  • 使用 jQuery 仅从字符串末尾修剪空格

    我知道 jQuery trim 函数 但我需要的是一种仅从字符串末尾修剪空格的方法 而不是开头 So str this is a string 会成为 str this is a string 有什么建议么 Thanks 您可以使用正则表达
  • 对象数组 - 在 Vue.js 生态系统中更新对象的正确方法

    我不确定问题到底出在哪里 但我会看看是否有人可以帮助我理解我的代码出了什么问题 我正在利用 Vuex 商店来跟踪某些不断变化的状态 我这样做如下 import Vue from vue import Vuex from vuex Vue u
  • Window 与 Var 声明变量[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • Javascript 选择 onchange='this.form.submit()'

    我有一个带有选择和一些文本输入的表单 我希望在更改选择时提交表单 使用以下方法可以正常工作 onchange this form submit 但是 如果表单还包含提交按钮 则当选择更改时 表单不会提交 我猜有某种冲突 我在这里有什么选择
  • 理论上防止 WebSocket 中第一个收到的消息丢失

    服务器端代码发送消息立即地连接打开后 它向客户端发送初始配置 问候语 以下代码是在客户端 var sock new WebSocket url sock addEventListener error processError sock ad
  • 使用 Lodash 的 TypeScript:_.map(["123", " 234 "], _.trim) 返回 boolean[]?

    我有一个字符串数组 它们已像这样分割 var searchValue 600 800 123 180 var groups searchValue split gt 600 800 123 180 因此项目周围可能存在空格 并且我想删除空格
  • ThreeJS无法加载Json文件

    首先 我已经读过这个问题 https stackoverflow com questions 17201888 three js exporter export object not working with jsonloader r58没
  • Dojo/on 和捕获阶段

    有没有办法用 dojo on 在捕获阶段 而不是冒泡阶段 触发事件 我最终在这里寻找有关 on 的前身 dojo connect 的信息 就其价值而言 dojo connect 似乎不支持捕获阶段的事件侦听器 它的工作原理是将事件处理程序作
  • 有没有办法防止输入 type=“number” 获得多个点值?

    我只想得到十进制值 如 1 5 0 56 等 但它允许多个点 有什么办法可以预防吗 您可以使用pattern属性
  • Fortran 中的函数和子例程有什么区别?

    我的印象是 Fortran 中子例程和函数之间的主要区别在于函数返回值 而子例程更改作为参数传递的部分或全部值 但后来我了解到您也可以修改作为参数传递给函数的变量 我很困惑 找不到很好的参考来了解它们之间的差异 那么 这两种结构之间有什么区
  • 获取淘汰赛中被点击元素的索引

    获取无序列表中单击元素的索引的最佳方法是什么 让我举个例子 假设我有以下 HTML 代码 ul li p p li ul 现在我有以下 javascript 代码来获取索引 self itemClicked function data it

随机推荐

  • 小米路由器3/3G/4通过串口(ttl)刷机

    准备工作 淘宝购买 USB转TTL CH340模块 杜邦线 排针 https detail tmall com item htm id 525204252260 spm a1z09 2 0 0 19dc2e8doubZVx u blagqs
  • 查看linux下安装了哪些软件

    1 查看是否安装了gcc 命令 rpm ql gcc rpm qa grep gcc 参数 q 询问 a 查询全部 l 显示列表 2 权限 安装和删除只有root和有安装权限的用户才可以进行 查询是每个用户都可以进行操作的 RPM 的介绍和
  • 《Docker 镜像操作》

    Docker 镜像原理 1 Docker 镜像本质是什么 是一个分层文件系统 2 Docker 中一个 centos 镜像为什么只有 200MB 而一个 centos 操作系统的 iso 文件要几个个 G Centos 的 iso 镜像文件
  • IDEA插件-PlantUML

    一 idea安装plantUml插件 在idea中Preferences gt plugins gt Browse repositories gt 搜索 plantUML gt 安装即可 二 通过 brew 安装 Graphviz 安装pl
  • [极客大挑战 2019]RCE ME(取反、异或绕过正则表达式、bypass disable_function)

    题目进去后 很简单的代码 显然命令执行 看到了eval 应该是用system等函数来实现命令执行 但是得要先绕过preg match 中正则表达式的限制 一开始傻乎乎的直接传了个数组 妄图绕过preg match 这很显然是不行的 附上大佬
  • c语言 push,深入了解C语言(局部变量的定义)

    深入了解C语言 这一节我们主要来研究一下C语言如何使用函数中的局部变量的 C语言中对于全局变量和局部变量所分配的空间地址是不一样的 全局变量是放在 DATA段 也就是除开 TEXT代码段的另一块集中的内存空间 而局部变量主要是使用堆栈的内存
  • Java 9:装B之前你必须要会的——泛型,注解,反射

    1 泛型 1 1 基本概念 泛型提供了编译期的类型检查 但问题远非这么简单 原生态类型 List list1 new ArrayList 规避的类型检查 List list1 new ArrayList
  • 【mcuclub】PH酸碱度检测传感器-PH4502C

    一 实物图 型号 PH4502C 二 原理图 编号 名称 功能 1 VCC 供电电压正极 5V 2 GND 供电电压负极 3 GND 模拟信号输出负极 4 PO 模拟信号输出正极 5 2V5 基准电压2 5V输出口 6 T1 温度传感器DS
  • 在 vscode 上刷力扣 Leetcode 可以这样来

    背景 神奇的算法网站 LeetCode 值得驻留 网页版似乎不太方便 作为习惯于在编译器上敲代码的你 如何 vscode 上优雅的刷力扣 Leetcode 在本地配置 记录下来方便备查 环境前置 电脑具备 NodeJs环境 第一步 安装插件
  • 模型优化-RMSprop

    RMSprop 全称 root mean square prop 算法 和动量方法一样都可以加快梯度下降速度 关于动量方法的内容可以参考这篇博文模型优化 动量方法 动量方法借助前一时刻的动量 从而能够有效地缓解山谷震荡以及鞍部停滞问题 而
  • linux云主机如何运维建站最简单-办法来了

    对于企业和个人站长来说 云服务器运维管理是一件比较棘手的问题 如果企业没有专业的运维工程师 那么就会使用一些工具来帮助运维 毕竟通过shh命令操作linux服务器的还是少数 那么运维服务器这件事就要用到一个工具linux面板 每个人对于云服
  • EXCEL VBA从入门到精通 第一章:VBA入门

    第一章 VBA入门 第一节 什么是VBA 介绍VBA的定义 作用和优点 VBA Visual Basic for Applications 是一种编程语言 是微软Office套件中的一个重要组成部分 主要用于自动化处理Office中的各种操
  • Xilinx平台SRIO介绍(二)SRIO IP核基础知识

    使用SRIO IP核必须掌握的基础知识 理解了这篇 剩下的只是代码罢了 汇总篇 Xilinx平台SRIO介绍 汇总篇 目录 前言 SRIO RapidIO GT 有什么关系
  • 基于python进行小波分析,频率谱分析

    该方法基于python进行时间序列的小波分析并出图 包括功率谱图和小波分解后的图 默认的小波为morlet小波 该代码由 Evgeniya Predybaylo 博士提供 https github com chris torrence wa
  • RecyclerView嵌套RecyclerView的滑动问题如何解

    一 概述 虽然今天我们要说的是Rv嵌套Rv的问题 但多数情况下我们都不会使用Rv嵌套Rv 来实现复杂的列表 而是使用多ItemType实现 可能再复杂点的 配合GridLayoutManager SpanSizeLookup一起来实现 再高
  • C/C++ 指针详解

    指针详解 参考视频 https www bilibili com video BV1bo4y1Z7xf 感谢Bilibili fengmuzi2003的搬运翻译及后续勘误 也感谢已故原作者Harsha Suryanarayana的讲解 RI
  • 【前端技术】Vue在打包之后出现Css样式冲突,解决方法。

    原文链接 先说问题 1 在做vue项目打包时出现Css样式冲突的问题 在本地运行项目时样式都是正常 但在服务器进行打包之后项目的整体样式就有问题了 举例说明 1 图片大小发生变化 怎么改也改不好 2 在查看F12中会多出当前页面没有设置过的
  • 关闭HttpClient控制台输出语句

    关闭HttpClient控制台输出语句 HttpClient相信大家都不陌生 在Java中经常用来在后台进行一些请求访问或者接口调用 当然这里不是介绍HttpClient使用的 关于HttpClient使用方面的文章 大家可以去百度或者Go
  • [leetcode] 推多米诺 双指针

    题目链接 一开始想多了 像成了真实生活中的那种会叠加的状态 就比如 RRL 中 左边的两个 R 会让第三个 L 向右边倾斜 直接用前缀和进行操作 但是发现示例1都无法通过 所以说是错的 正确的想法是 每一个暂未确定状态的 都由这个字符两侧最
  • TreePanel树形节点不收缩刷新

    TreePanel树形节点不收缩刷新 遇到的问题 在使用Ext树形组件的时候 下层节点的刷新 总是需要下层节点全部搜索然后再展开 如果需要实时的从后台获取数据 改变某些节点的text或者icon时 就显得不够优雅了 解决方案 负责树形组件T