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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值