`

Ext树的相关操作

阅读更多

功能简介:(1)采用Ext2.2开发的;(2)支持数据三层操作;(3)支持右键菜单项;(4)节点增删改查操作;

数据库表的设计为表A(id,type,text),表B(id,fid,text),表A为根节点一级菜单与二级菜单数据项,其中type用于判别类型,fid为表B的外键,即A中的id,其实两张表也可以合为一张表,方法是利用type进行控制。

表A数据参考:

(1,0,'根节点');

(2,1,'二级菜单1');

(3,1,'二级菜单2');

... ...

 

表B数据参考:

(1,2,'三级菜单1');

(2,2,'三级菜单2');

(3,3,'三级菜单3');

...  ...

 

以下是Javascript代码实现

/***Ext树相关控件定义开始***/
/***定义树的节点***/
var treeRoot = new Ext.tree.AsyncTreeNode({
			id:'root',
			treeid : '1',//根节点在数据库表中对应的ID
			text : "根节点名称",
			expanded : true,
			expandable : true,
			draggable : false
		});
/***定义树的数据项加载器***/
var treeLoader = new Ext.tree.TreeLoader({
			url : '',//获取一级菜单数据项URL,输出JSON格式数据
			baseParams : {
				parentId : '0'
			},
			listeners : {
				beforeload : function(tree, node) {
					var treeid = node.attributes.treeid;
					//根据treeid获取第二层与第三层的数据项
					if (treeid == '1') {
						tree.url = '';//获取二级菜单数据项URL,输出JSON格式数据
						tree.baseParams.parentId = treeid;
					} else {
						tree.url = '';//获取二级菜单下对应三级菜单数据项URL,输出JSON格式
						tree.baseParams.parentId = treeid;
					}
				}
			}
		});
var treeMenu;//定义右键菜单
/***定义树的面板***/
var treePanel = tree = new Ext.tree.TreePanel({
	root : treeRoot,
	loader : treeLoader,
	width : 220,
	height : 340,
	autoScroll :true,
	contextMenu : treeMenu,
	listeners : {
		click : function(node, e) {
			if (node.isLeaf()) {
				//当前节点是叶子节点时触发
			}
		},
		//定义右键菜单
		contextmenu : function(node, e) {
			//当节点为根节点时
			if (node.parentNode == null) {
				node.select();//当前节点被选中
				treeMenu = new Ext.menu.Menu({
					items : [{
						text : "添加二级菜单项",
						iconCls : 'leaf',
						handler : function() {
							Ext.MessageBox.prompt('请输入二级菜单名称', "", function(e,
									text) {
								if (e == "ok") {
									Ext.Ajax.request({
										//添加二级菜单的URL
										url : '',
										params : {
											czdw : text,
											dwlb : node.attributes.treeid,
											gdjdm: wp.gdjdm
										},
										method : 'post',
										sync : true,
										success : function(res) {
											//请求返回成功后在前天添加相应节点
											var jsonObj = eval("(" + res.responseText + ")");											
											var tempNode = new Ext.tree.TreeNode({
												treeid : jsonObj.treeid,
												text :jsonObj.text,
												expandable : true,
												draggable : false,
												dw:true//节点自定义属性,可根据需要添加,主要为判断加载菜单项
											});
											//注册右键菜单
											tempNode.on('contextmenu',function(node,e){
												node.select();
												treeMenu.showAt(e.getPoint());		
											});
											node.appendChild(tempNode);
											try{
												tempNode.select();//定位到新节点	
											}catch(e){}
										},
										failure : function() {
											Ext.Msg.alert('提示消息','操作失败!');
										}
									});
								} 
							})
						}
					}]
				});
				
				treeMenu.showAt(e.getPoint());//显示菜单位置
			} else if (node.attributes.dw == true) {//当前为二级菜单节点时,即二层节点
				node.select();
				treeMenu = new Ext.menu.Menu({
					items : [{
						text : "添加三级菜单",
						iconCls : 'leaf',
						handler : function() {
							Ext.MessageBox.prompt("请输入三级菜单名称", "", function(e,
											text) {
										if (e == "ok") {
											Ext.Ajax.request({
														//三级菜单添加URL
														url : '',
														params : {
															mid : node.attributes.treeid,
															ryxm : text,
															gdjdm : wp.gdjdm
														},
														success : function(res) {
															//前台添加相应节点
															var jsonObj = eval("(" + res.responseText + ")");											
															var tempNode = new Ext.tree.TreeNode({
																treeid : jsonObj.treeid,
																text :jsonObj.text,
																expanded : false,
																expandable : false,
																draggable : false,
																ry:true//和dw属性类似,用于判断当前为第几级菜单
															});
															node.appendChild(tempNode);
															tempNode.on('contextmenu',function(node,e){
																node.select();
																treeMenu.showAt(e.getPoint());		
															});
															node.attributes.leaf=false;
															node.attributes.leaf.iconCls='';
															node.getUI().getIconEl().src='../../../ext/resources/images/default/tree/folder.gif';//修改父节点图标
															node.expand();	
															//定位到新节点	
															try{
																tempNode.select();
															}catch(e){}
														},
														failure : function() {
															Ext.Msg.alert('提示消息','操作失败!');
														}
													});
										}
									})
						}
					}, {
						text : "编辑二级菜单",
						iconCls : 'leaf',
						handler : function() {
							var nodeText = node.attributes.text;
							Ext.MessageBox.prompt("请输入二级菜单新名称", nodeText, function(e,
											text) {
										if (e == "ok") {
											Ext.Ajax.request({
														url : '',//二级菜单更新URL
														params : {
															id : node.attributes.treeid,
															czdw : text
														},
														success : function(request) {
															node.setText(text);
															Ext.Msg.alert('提示消息','编辑成功!');
														},
														failure : function() {
															Ext.Msg.alert('提示消息','操作失败!');
														}
													});
										}
									})
						}
					}, {
						text : '删除二级菜单项',
						iconCls : 'leaf',
						handler : function() {
							Ext.Ajax.request({
								url : '',
								params : {
									id : node.attributes.treeid
								},
								success : function(request) {
										
										if(node.hasChildNodes()){
											var nodes = node.childNodes;
											for(var i=0;i<nodes.length;i++){
												nodes[i].remove();
											}
										}
										node.remove();
										//Ext.Msg.alert('提示消息','删除成功!');
								},
								failure : function() {
										Ext.Msg.alert('提示消息','操作失败!');
								}
							});
						}
					}]
				});
				treeMenu.showAt(e.getPoint());
			} else if ( node.attributes.ry == true) {//当前节点为三级菜单项时,即三层节点
				node.select();
				treeMenu = new Ext.menu.Menu({
							items : [{
						text : "编辑三级菜单项",
						iconCls : 'leaf',
						handler : function() {
							var nodeText = node.attributes.text;
							Ext.MessageBox.prompt("请输入三级菜单新名称", nodeText, function(e,
											text) {
										if (e == "ok") {
											Ext.Ajax.request({
														url : '',//更新三级菜单数据项URL
														params : {
															id : node.attributes.treeid,
															ryxm : text
														},
														success : function(request) {	
															node.setText(text);
														},
														failure : function() {
															Ext.Msg.alert('提示消息','操作失败!');
														}
													});
										}
									})
						}
					}, {
						text : '删除三级菜单项',
						iconCls : 'leaf',
						handler : function() {
							
							Ext.Ajax.request({
								url : '',//删除三级菜单的URL
								params : {
									id : node.attributes.treeid
								},
								success : function(request) {
									node.remove();	
									//Ext.Msg.alert('提示消息','删除成功!');
								},
								failure : function() {
										Ext.Msg.alert('提示消息','操作失败!');
								}
							});
						}
					}]
						});
				treeMenu.showAt(e.getPoint());
			}
		}
	}
});
//var treeEditor = new Ext.tree.TreeEditor(treePanel);
var treeWin;
/***树相关控件定义结束***/

/***
 * 获取树界面
 */
function getUnitsManageTreeWin() {
	if (!treeWin) {
		treeWin = new Ext.Window({
					title : "Ext树",
					width : 240,
					height : 370,
					items : [treePanel],
					closeAction : 'hide'
				});
	}
	treeWin.show();
}
2
0
分享到:
评论

相关推荐

    ext2.0 树的增删改操作

    以上就是关于"ext2.0 树的增删改操作"及其相关知识的详细说明。掌握这些内容,将有助于你在构建Web应用时更熟练地使用树形控件,并且能够根据需求进行定制化开发。同时,了解下拉树的实现,可以使你的界面更加友好,...

    Ext树例子

    总结来说,`Ext树例子`是关于如何使用ExtJS库中的`Ext.tree.Panel`组件来展示和操作层次化数据的一个主题。`tree1.txt`和`tree2.txt`文件提供了创建树的数据源,通过解析这些文件,我们可以构建出具有实际数据的交互...

    Ext树创建说明.rar

    其中,“Ext树”(Ext Tree)是ExtJS中的一个重要组件,用于展示层级结构的数据,如文件系统、组织架构等。本文将深入探讨如何在ExtJS中创建一个树形视图。 首先,理解Ext树的基本结构至关重要。一个Ext树由节点...

    ext 树控件+数据库

    在IT领域,EXT是一个流行的JavaScript库,用于构建富客户端应用程序,尤其在Web应用开发中广泛应用。...通过这种方式,你可以构建一个动态、交互性强的EXT树控件,有效地展示和操作数据库中的层次结构数据。

    ext树的控制选择和撤销,可以直接使用

    2. **选择事件**:EXT树提供了一些与选择相关的事件,如`select`、`deselect`和`beforeselect`。开发者可以监听这些事件并添加自定义逻辑,比如在选择节点时触发某些动作。 3. **撤销操作**:EXT本身并不直接提供...

    ext 下拉树 ext2

    1. `tree.htm`:这可能是一个包含下拉树示例的HTML文件,用于展示如何使用Ext JS创建和操作下拉树。 2. `dropTree.htm`:同样,这可能是一个与下拉树相关的HTML页面,可能包含了不同的实现或示例。 3. `MzTreeView...

    ext js 下拉树

    下拉树(Dropdown Tree)是Ext JS中的一种特殊控件,它结合了下拉列表和树结构的功能,通常用于展示层次化的数据,并让用户从中选择一个或多个项。 下拉树的基本结构由两部分组成:一个文本框和一个关联的下拉面板...

    Ext下拉列表树

    这个类扩展自`Ext.form.field.Select`,因此它具备常规下拉列表的所有特性,同时增加了树形结构的展示和操作。以下是一些关于如何使用Ext下拉列表树的关键知识点: 1. **配置项**:创建下拉列表树时,需要定义一些...

    简单的ext树

    【Ext树】是一种基于Ext JS库的图形用户界面组件,用于呈现层次结构的数据。Ext JS是一个强大的JavaScript框架,主要用于构建富客户端应用。在本案例中,“简单的ext树”是一个为初学者设计的基础教程,旨在帮助那些...

    Ext TreePanel Checked Ext复选框树

    在描述中提到的"Ext TreePanel Checked Ext复选框树"是指`TreePanel`的一种特殊形式,它扩展了基本的树视图,加入了复选框功能。 复选框树(Checked Tree)允许用户通过复选框来选择或取消选择树结构中的节点。这种...

    ext 级联选择的树形控件

    "EXT级联选择的树形控件"是一个实现树形结构并支持级联选择的EXT组件。在实际应用中,它可以帮助用户通过树节点的选择来联动控制其他相关选项的状态。这个控件可能包含以下关键特性: 1. **树形结构**:每个节点...

    解析Xml构建Ext树形菜单

    首先,让我们了解EXT树形菜单的基本概念。EXT的TreePanel组件是实现树形结构的主要工具,它能够展示层次化的数据,通常用于导航或展现层级关系。树形菜单支持节点的展开、折叠、添加和删除,以及各种交互操作。 要...

    Ext 2.0 树形机构

    Ext2.0不仅仅实现了复选框的树形菜单,而且使得在选中某个节点时,如果有子节点,那么就能够将所有的字节点全部选中,当然你也可以直接选择你希望的节点。但是,当你第一次选中某个有子节点但是子节点并没有展开的...

    Ext 对数据库操作的简单实例

    在描述中提到的“ext 2.1相关的文件和例子”,意味着我们将探讨的是Ext JS 2.1版本的相关知识,这是一个较早的版本,但仍然广泛用于教学和理解基础概念。 1. **Ext JS简介**:Ext JS的核心特性包括组件化开发、强大...

    ext树实例代码

    从给定的文件信息中,我们可以深入探讨“ext树实例代码”这一主题,了解如何在Ext JS中详细应用tree控件。 ### 标题:ext树实例代码 #### 描述:ext中,tree控件的详细应用,实例。 ### 知识点解析: **1. Ext ...

    EXT构造动态树 包括增删改操作

    在提供的`动态树例子json`文件中,可能包含了上述提到的JSON数据结构,用于演示EXT如何处理动态树及各种操作。通过实际代码示例,我们可以更深入地理解EXT动态树的操作方式。在实践中,结合EXT的API文档和示例代码,...

    Ext树形菜单(我自己做的)

    在给定的标题“Ext树形菜单(我自己做的)”中,我们可以推断出这个压缩包包含了一个由开发者自定义的ExtJS树形菜单组件。树形菜单是用户界面中常用的一种元素,它用于展示层次结构的数据,比如文件系统、组织结构或...

    EXT实现动态树的功能

    总的来说,EXT实现动态树功能涉及到EXT TreePanel的使用、数据存储的配置、节点操作的实现以及用户交互的处理。通过深入理解和实践这些知识点,你可以创建出功能强大的动态树形视图,满足复杂的数据管理和展示需求。

    ext树 无限级 json 数据格式 动态加载

    本文将深入探讨如何处理无限级JSON数据格式并实现动态加载,以优化EXT树的性能。 首先,我们要理解EXT树的基本结构。EXT树的每个节点都是一个`Ext.tree.Node`对象,包含ID、文本、子节点等属性。无限级树意味着树的...

    如何使用ext写的树形菜单

    创建一个基本的EXT树形菜单,首先需要定义一个配置对象,包含`title`(菜单标题)、`store`(存储树形数据的Store)和`rootVisible`(是否显示根节点)等属性。例如: ```javascript var treePanel = Ext.create...

Global site tag (gtag.js) - Google Analytics