`
kjkhi
  • 浏览: 184814 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ExtJS异步加载树节点(权限管理)

阅读更多
先在前台ExtJS页面中:
GridPanel中显示所有用户信息:
var userGrid = new Ext.grid.GridPanel({
			   id:'userGrid',
			   title : '用户信息表',
			   region : 'center',
			   minColumnWidth : 50,
			   enableDragDrop : true, //允许拖拽!
		       ddGroup: "DDSource",
			   loadMask : {msg:'正在加载数据,请稍侯...'},
			   store : userStore,
			   sm : sm,
			   cm : cm,
			   viewConfig : {
			     forceFit : false
			   },
			   bbar : pageToolBar
			});

新建一颗树:
var userRole_treepanel = new Ext.tree.TreePanel({
				id : "userRole_treepanel",
				title : '用户权限',
				width : 200,
				region : 'east',
				collapseMode :'mini',
				collapsible : true,
				lines: true,
				enableDD : true,//允许拖拽
		        ddGroup: "DDSource",//拖拽分组
				autoScroll:true,
				rootVisible : true,
				loader : treeLoader,
				root : tree_root
			});

注册树节点展开前事件,在展开前异步加载数据:
//树节点展开前事件
userRole_treepanel.on("beforeexpandnode",function(node){
	var id = node.id;
	if (id != "tree_root" && (node.hasChildNodes() == "" || node.firstChild == null)){
		Ext.Ajax.request({
			url : "getChildNode_userRole",
			params : {roleId:id},
			success : function(response, opts){
				var child = Ext.decode(response.responseText);
				node.appendChild(child);
				if (temp != null){
					ddFunction(node, null, temp.selections);
					temp = null;
				}
				if(sourceRole != null && sourceUser != null){
					appendNode(node,sourceUser,sourceRole);//把数据加进该节点的子节点
					sourceRole = null;
					sourceUser = null;
				}
			},
			failure : function(response,opts){
				
			}
		})
	}
});

权限从树拉响gridpanel实现删除权限功能:
//响应权限从树拉向gridpanel实现删除!
userRole_treepanel.on("afterrender",function(){
	var dd = new  Ext.dd.DropTarget("userGrid",{
		ddGroup:"DDSource",
		notifyDrop  : function(ddSource, e, data){
			Ext.MessageBox.confirm("提示","确定删除用户【"+data.node.text+"】的【"+data.node.parentNode.text+"】权限?",function(id){
        		if("yes" == id){
        			var role_id = data.node.parentNode.id;
                    var user_id = data.node.id;
                    user_id = user_id.substring(user_id.indexOf("@")+1,user_id.length);
                    Ext.Ajax.request({
                    	url : "deleteUserRole_userRole",
                    	params : {roleId:role_id,userId:user_id},
                    	success : function(response,opts){
                    	},
                    	failure : function(response, opts){
                    	
                    	}
                    })
                    data.node.remove();
        		}
        	});
		}

	})
});

增加权限:
//增加权限! 
userRole_treepanel.on("beforenodedrop",function(dropEvent){
	var node = dropEvent.target; // 目标结点
    var data = dropEvent.data;  // 拖拽的数据
    var point = dropEvent.point; // 加入到目标结点的位置方式append,above,below
    if (node.id == 'tree_root'){
    	dropEvent.cancel =true;
    	return false;	                
    } 
    if (node.parentNode.id == 'tree_root' && point != 'append') {
        return false; 
    }
    if (!data.node) { //如果data.node为空,不是tree本身的拖拽,而是从grid到tree的拖拽,需要处理
        switch (point) {
            case 'append': // 添加时,目标结点为node,子结点设为空。这时需要判断该节点是否已经从后台异步获取数据
		        if ((node.hasChildNodes() == "" || node.firstChild == null) && !node.isExpanded()){
		        	temp = data;
		        	node.expand();
		        }else{
		        	if (!node.isExpanded()){
		        		node.expand();
		        	}
		        	ddFunction(node, null, data.selections);
		        }
			   	break;
            case 'above': 
                ddFunction(node.parentNode, node, data.selections);
                break;
            case 'below': 
                ddFunction(node.parentNode, node.nextSibling, data.selections);
                break;
        }
    }else {//树节点本身之前的拖动
    	var isok = true;
		var source_user_node = data.node;
		var source_user_id = data.node.id.substring(data.node.id.indexOf("@")+1,data.node.id.length);
    	var source_role_id = data.node.parentNode.id;
    	var target_role_id;
    	if(point == 'append') {
    		if ((node.hasChildNodes() == "" || node.firstChild == null) && !node.isExpanded()){
	        	node.expand();
	        	sourceRole = data.node.parentNode;
	        	sourceUser = source_user_node;
	        	return false;
	        }else{
	        	if (!node.isExpanded()){
		        		node.expand();
		        }
		        target_role_id = node.id;
        		node.eachChild(function(child){
                    if(source_user_id == child.id.substring(child.id.indexOf("@")+1,child.id.length)){
                    	Ext.MessageBox.alert("提示",  "不能重复为用户:【"+data.node.text+"】添加【"+node.text+"】权限!");
                    	isok = false;
                    }
                });
            	if (isok){
            		Ext.Msg.confirm("提示","您确定要更改用户【"+data.node.text+"】的权限为【"+node.text+"】?",function(btn){
            			if ("yes" == btn){
                			node.appendChild(new Ext.tree.TreeNode({id:source_user_id,text:source_user_node.text,leaf:true}));
                			source_user_node.remove();
                        	ajaxRequest(source_user_id,source_role_id,target_role_id,"update");//更新数据库,update user_role set user_id = source_user_id,role_id = target_role_id where user_id = source_user_id and role_id = source_role_id
            			}else return false;
            		});
            		return false;
            	}else return false;
	        }
    	}else{
    		target_role_id = node.parentNode.id;
    		node.parentNode.eachChild(function(child){
                if(source_user_id == child.id.substring(child.id.indexOf("@")+1,child.id.length)){
                	Ext.MessageBox.alert("提示", "不能重复为用户【"+data.node.text+"】添加【"+node.parentNode.text+"】权限!");
                	isok = false;
                }
            });
            if (isok){
            	Ext.Msg.confirm("提示","您确定要更改用户【"+data.node.text+"】的权限为【"+node.parentNode.text+"】?",function(btn){
            		if ("yes" == btn){
                		node.parentNode.appendChild(new Ext.tree.TreeNode({id:source_user_id,text:source_user_node.text,leaf:true}));
            			source_user_node.remove();
                    	ajaxRequest(source_user_id,source_role_id,target_role_id,"update");//更新数据库update
            		}else return false;
            	});
            	return false;
            }else return false;
    	}
    }
});

分享到:
评论
1 楼 kimmking 2011-06-28  
发错地方了。

相关推荐

    基于ExtJS技术与SSH框架的权限管理研究

    ExtJS的树控件支持异步加载,这意味着当用户滚动或展开树节点时,只加载必要的数据,这极大地提高了系统的响应速度和性能。同时,由于跨浏览器兼容性的良好支持,开发者无需担心浏览器差异带来的问题。 **SSH框架**...

    tree 动态树 extjs ajax

    动态树通常通过Ajax请求来获取并填充数据,从而实现异步加载,提高页面性能。这种特性使得树结构在不阻塞用户界面的情况下,能够逐步加载子节点,减少了初次加载时的数据量。 **ExtJS TreePanel** 在ExtJS中,动态...

    带复选框的异步动态树

    6. **实现细节**:在EXTJS中,可以利用TreeLoader或TreeProxy来实现异步加载。同时,需要在后端编写API接口,该接口接收前端的请求,查询数据库并返回树节点数据。此外,为了实现复选框的功能,每个树节点可能需要...

    关于extjs treepanel复选框选中父节点与子节点的问题

    5. 异步加载节点数据:ExtJS支持异步加载树节点数据,通常通过Ajax调用来实现。在示例代码中,authorityTree函数就是用来处理从服务器获取节点数据,并将其加载到TreePanel中。 6. 递归函数的运用:在示例代码中,...

    Extjs4.2 MVC 左菜单动态加载功能

    5. **异步加载**:使用TreeLoader的`load`方法,传入要加载的节点,服务器返回该节点的子节点数据。 6. **服务端接口**:后端需要提供一个接口,接收父节点ID,返回该节点的子节点数据。通常采用JSON格式,每个对象...

    ExtJs 连接数据库并且生成动态树

    ExtJs中的`Ext.data.Store`组件是与服务器进行数据交互的核心,它可以配置URL属性指向你的数据接口,以便异步加载数据。 1. **建立数据模型(Model)** 在ExtJs中,你需要定义一个数据模型(Model)来描述数据库中...

     基于SSH2框架与ExtJS技术的权限管理模块的设计与实现

    并且以进销存管理平台的权限管理系统为切入点对系统运用的ExtJS技术和SSH2框架进行分析,在系统分析设计中展示ExtJS多级动态树结构如何在权限管理系统中应用并实现Ajax技术的异步加载树节点功能,并因此提高权限管理...

    带复选框的 ExtJs tree

    这种类型的树形结构在许多场景下都非常有用,比如权限管理、多级分类管理等,它允许用户选择或取消选择树中的节点,从而实现对数据的多选操作。 ### 描述分析:“分享一个ExtJS Tree, 完整的带有复选框的树形结构”...

    Extjs4.X下comboboxTree下拉树型菜单,完美支持多选、单选,绝对好用

    - 对于大数据量的树形结构,考虑使用异步加载(`async: true`),以提高性能。 - 考虑使用分页(`paging: true`)以减少内存占用。 - 配置合理的搜索策略(`queryMode`)以提升查询效率。 - 通过自定义事件处理...

    用ExtJS实现动态载入树

    - **AsyncTreeNode**: 表示异步加载的树节点。 #### 四、后端处理 为了使前端能够获取到数据,需要后端提供数据接口。这个接口通常会返回JSON格式的数据,以便于前端解析。 - **OrgTreeJsonData.action**: 这是...

    ExtJs4 Checkbox tree

    对于大数据量的树,可以使用异步加载(lazy loading)技术,只加载当前可视区域的节点,提高性能。 11. **与服务器端通信**: 当用户完成选择后,通常需要将选中的节点ID发送到服务器端进行保存或处理。这可以...

    extjs tree示例

    在创建TreePanel时,我们需要定义`rootNode`,它是树的根节点,以及`store`,用于存储和管理树节点的数据。 ```javascript var treeStore = Ext.create('Ext.data.TreeStore', { root: { text: 'Root Node', ...

    ExtJs3 演示系统

    此外,ExtJs3还提供了数据代理(Data Proxy)和数据模型(Data Model)来管理数据的加载和保存流程。 员工管理系统可能包含以下几个模块: 1. **员工列表模块**:使用Grid组件展示员工信息,如姓名、职位、部门等...

    ExtJS中文手册.pdf

    - **权限管理**:包括公共、私有、特权等权限的管理。 #### 12. DomQuery基础 - **DomQuery介绍**:DomQuery是ExtJS提供的一个强大的DOM操作库,类似于jQuery。 - **基础用法**:包括选择器、遍历、过滤等基础操作...

    Extjs 通用后台模板| 经典 Tree+Tab+Grid

    开发者可以方便地添加、删除节点,以及通过异步加载实现大量数据的高效展示。在这个模板中,树形视图可能已经被配置好,可以直接用于显示后台系统的目录结构或者权限层次。 2. **选项卡(Tab)**: TabPanel是ExtJS...

    树的操作【菜单增删改拖动】.zip

    7. **实际应用**:在实际项目中,树的操作不仅限于上述基本功能,还可能包含节点展开/折叠、异步加载、搜索、排序等特性。理解并掌握这些操作对提高用户体验和系统效率至关重要。 8. **调试与优化**:开发过程中,...

    extjs tree + json+struts2示例源代码

    在页面中,定义一个TreePanel,设置其store属性为一个AjaxStore,用来异步加载JSON数据。AjaxStore会向服务器发送请求,接收返回的JSON数据并自动构建树结构。 6. **配置AjaxStore**:AjaxStore需要配置URL(指向...

    admin.zealot09:表达 extjs 节点

    标题中的“admin.zealot09:表达 extjs 节点”表明这是一个关于使用ExtJS构建的管理员系统的项目,其中可能涉及到ExtJS的树形节点操作。ExtJS是一款强大的JavaScript前端框架,用于构建富客户端应用,尤其擅长数据...

Global site tag (gtag.js) - Google Analytics