`
daoger
  • 浏览: 528013 次
  • 性别: Icon_minigender_1
  • 来自: 山东济南
社区版块
存档分类
最新评论

带checkbox的dhtmlxtree菜单树异步加载时的问题解决

阅读更多
最近一直很忙,自己负责几个模块的设计开发,还有和其他服务接口的测试联调,整个系统web部分的集成,corba、WebService都在向我狂轰滥炸,小米加步枪进行反击的同时,又对dhtmlxtree的源码做了点修改。
问题是这样的,数据库里要配置访问权限的视图有几百个,当然已经按照属性分门别类了,可以用菜单树逐层浏览;我用带checkbox的dhtmlxtree菜单树进行权限配置功能的实现,但是树节点太多了,一次性加载的话,总的xml字符流大概有400KB,初始加载时就比较费时间,大概要用时5-10秒,操作的时候也比较慢;IE确实不怎么样,在各个浏览器里js的运行速度是最慢的,IE上展开一个树节点大概要等待2秒,收起一个树节点大概要3秒,进行别的操作也很缓慢;firefox和google浏览器不错的,任何操作都在可理解的正常范围以内;IE要是不和操作系统绑定,早就被淘汰了。这毕竟是假设,还得寻求兼容的优化方式,那就异步加载呗!
用过的朋友肯定都知道,需要用dhtmlxtree的enableCheckBoxes函数设定启用checkbox;但是异步的情况下,有些子节点在页面中还没有加载,如果用非也子节点前面的多选框选择这支树杈进行批量设置的话,很难判断这些没加载的节点是否已经进行了设置,服务器端也很难进行处理。没办法,dhtmlxtree没有针对于一个节点的配置方法,改源码吧!我的需求只是要在叶子节点上有选择框,并且是单选框。
dhtmlxtree源码中的处理是构架树状菜单的时候其实已经构建了选择框,只是没有显示而已,那样就更好处理了。为了通用,还是在enableCheckBoxes方法设定显示选择框的时候再显示吧!
具体修改:
1.隐藏非叶子节点前面的选择框,这个实现在dhtmlXTreeObject.prototype._createItem函数中
......
......
var td11 = document.createElement("td");
	var inp = this._getImg(this.cBROf ? this.rootId : itemObject.id);
	inp.checked = 0;
	this._setSrc(inp, this.imPath + this.checkArray[0]);
	inp.style.width = "16px";
	inp.style.height = "16px";
	//daoger 2009-10-24 start
	//if (!acheck) {
	//	((!_isIE) ? td11 : inp).style.display = "none";
	//}
	((!_isIE) ? td11 : inp).style.display = "none";
	//daoger 2009-10-24 end
	td11.appendChild(inp);
	if ((!this.cBROf) && (inp.tagName == "IMG")) {
		inp.align = "absmiddle";
	}
	inp.onclick = this.onCheckBoxClick;
	inp.treeNod = this;
	inp.parentObject = itemObject;
	if (!window._KHTMLrv) {
		td11.width = "20px";
	} else {
		td11.width = "16px";
	}
......
......

这里是构建多选框。
2.显示叶子节点前面的单选框。带单选框的节点是作为新建节点添加到别的节点上的,初始化的时候不建立,找到dhtmlXTreeObject.prototype._attachChildNode方法
......
if ((parentObject._r_logic) || (this._frbtr)) {
		//daoger 2009-10-24 start
		if (_isIE) {
			n.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0].style.display = "";
		} else {
			n.htmlNode.childNodes[0].childNodes[0].childNodes[1].style.display = "";
		}
		//daoger 2009-10-24 end
		this._setSrc(n.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0], this.imPath + this.radioArray[0]);
	}
......

这样就可以了,测试一下吧!其他操作方法均不受影响!
1
0
分享到:
评论
1 楼 smallcat 2011-11-22  
高人。

相关推荐

    扩展了一棵jquery的树插件SimpleTree(jquery.simple.tree.js),支持json数据,checkbox树,以及异步加载,

    这个插件特别之处在于它支持JSON数据格式,可以创建带有复选框的树结构,并且具备异步加载功能,这在处理大量数据或动态数据更新时非常有用。下面我们将详细探讨这些特性。 **一、JSON数据支持** 在`jQuery Simple...

    带checkbox的树型菜单

    "带checkbox的树型菜单"是一个常见的需求,常用于管理具有层级结构的数据,例如文件系统、组织架构或者权限分配等场景。这个功能允许用户通过复选框来选择和操作菜单项,同时还支持全选和反选,以及在多级菜单中联动...

    dtree树形菜单(有带checkbox实现)

    本工程使用dTree组件实现树形菜单的展示 有静态树形菜单和动态(从数据库获取数据)树形菜单展示两种 ...菜单既有普通的树结构展示,也有方便做权限等功能的带选择框的展示(含带默认选中checkbox的处理)

    wpf实现带checkbox层级联动的树形菜单

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)来实现一个具有复选框的层级联动树形菜单。这个功能丰富的菜单不仅允许用户通过右键操作进行展开、关闭、选择和反选所有节点,而且在选择...

    树形菜单带checkbox

    "树形菜单带checkbox"则是在这种菜单的基础上添加了复选框(checkbox)功能,允许用户进行多选操作,如全选、反选、选择特定节点等,极大地提升了用户的交互体验。 在Web开发中,实现树形菜单带checkbox通常涉及到...

    带checkbox的树

    在IT领域,"带checkbox的树"是一种常见的用户界面元素,尤其在数据管理和配置系统中广泛应用。这种元素结合了树形结构和复选框的功能,允许用户以层级方式选择或勾选一组相关项。在本场景中,描述提到是个人自制的...

    wicket组织树带checkbox可逐层加载数据示例

    本示例“wicket组织树带checkbox可逐层加载数据”聚焦于如何利用Wicket实现一个具备层级结构、带有复选框(checkbox)的树形视图,并支持按需动态加载数据。 首先,我们要理解“组织树”。在Web应用中,组织树通常...

    wpf实现的checkbox层级联动树形菜单

    在本文中,我们将深入探讨如何使用WPF(Windows Presentation Foundation)技术实现一个具有层次结构的Checkbox树形菜单,以及如何实现右键菜单功能,包括展开所有、关闭所有、选择所有和反选所有。WPF是.NET框架的...

    带CheckBox的TreeView控件

    当这两者结合时,我们得到了"带CheckBox的TreeView控件",这是一个功能强大的用户界面元素,特别适用于需要用户进行多选操作的情况,比如文件管理器、设置菜单等。 在.NET Framework或WPF(Windows Presentation ...

    带有checkbox的权限树

    在IT领域,尤其是在前端开发中,"带有checkbox的权限树"是一种常见的用户界面设计,用于管理复杂的层级结构数据,如组织架构、权限分配等。这种设计通常涉及到jQuery库和树形插件,如本例中的`jquery-treeview`。...

    jQuery的高性能TreeView源码(带CheckBox)

    jQuery的高性能TreeView源码(带CheckBox) 1:支持静态的树,即一次性将全部数据加载到客户端。 2:异步树,即一次只加载一级或若干级节点,子节点可以异步加载数据。 3:Checkbox树(可能是静态树也可能是异步树...

    checkbox tree 带checkbox的树

    在IT领域,"带checkbox的树"(Checkbox Tree)是一种常见的UI组件,广泛应用于数据管理和配置界面中。这种组件结合了树形结构和复选框的功能,用户可以通过选择或取消选择节点来对数据进行多选操作,使得在层级关系...

    js树,带checkBox

    "js树,带checkBox"特指在JavaScript实现的树结构中,节点具有复选框功能,允许用户进行多选操作。这种功能在很多应用场景中都非常实用,比如在设置权限、选择项集合时。 在JavaScript中实现这样的树形结构,通常会...

    安卓多级树形列表(最大同时异步加载60万条数据)

    这个"安卓多级树形列表(最大同时异步加载60万条数据)"项目针对这一问题进行了深度优化,提供了强大的功能和良好的用户体验。 首先,我们要理解多级树形列表的核心原理。在Android中,这种列表通常通过递归实现,每...

    FlexViewer 树形结构带checkbox事件处理

    在本场景中,我们讨论的是如何在FlexViewer中实现一个带有复选框的树形结构,并处理其事件,特别是当用户勾选这些复选框时如何加载地图上的点标注。 树形结构在GIS应用中通常用于组织地图图层、服务或者数据集,让...

    Android 树形结构的多选CheckBox

    这个“Android 树形结构的多选CheckBox”项目提供了一个易于集成和使用的解决方案。 首先,我们要理解树形结构。在计算机科学中,树是一种数据结构,由节点(或称为顶点)和边组成,每个节点可以有零个或多个子节点...

    解决EasyUI中Tree的CheckBox不能设置为禁用的问题

    //设置一个标志位,在整棵树加载完成后就将标志位设置为false,不允许勾选checkbox了,在加载数据完成之前是可以勾选的,用来在数据中设置勾选了哪些节点 //这样就可以实现读取url数据时是可以设置勾选了哪些节点,在...

    带 checkbox 的 dtree 权限树

    "带checkbox的dtree权限树"是一种常见的实现方式,它结合了数据树(dtree)与复选框(checkbox)功能,用于展示层级关系的权限结构。这种权限树常用于角色分配、用户权限设置以及权限级别的可视化管理。 1. **dtree...

    listview+checkbox,动态加载及分页的实现,结合一起使用

    listview+checkbox,动态加载及分页的实现,结合一起使用,很有帮助的,而且在实际项目中也是经常用到的。。。

    完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题

    本文将详细探讨这些问题以及如何通过优化来实现“完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题”。 一、焦点冲突问题 在ListView中,通常一个列表项被点击时,焦点会自动转移到该列表项,但如果列表...

Global site tag (gtag.js) - Google Analytics