`

关于Ext从Tree向Tree拖拽的问题

阅读更多
将TreePanel的数据向GridPanel中拖拽的功能!
Ext.onReady(function(){
	//创建tree 
	var tree = new Ext.tree.TreePanel({
		ddGroup          : 'gridDDGroup',
		title:'全部的组织机构',
	    animate:true, 
	    autoScroll:true,
	    loader:new Ext.tree.TreeLoader({
			dataUrl: apppath+'/back/jsp/organise/findalldepartment.html',
			listeners:{
			      'beforeload':function(treeloader,node){
			        	this.baseParams.depparentid = node.attributes.depid;
			       }
			}
		}),
		root: new Ext.tree.AsyncTreeNode({
			depid:157,iconCls:'depicon',
			text:'利星行集团',id:'157'
		}),
	    enableDD:true,
	    containerScroll: true,
	    border : true,
	    width  : 250,
	    height : 300,
	    region : 'west',
	    listeners:{'nodedrop':function(e){}},
	    dropConfig: {appendOnly:true}
	});
	tree.getRootNode().expand();
	//创建GridPanel
    var myData = [];
	
	var fields = [
	   {name: 'deplevel',mapping : 'deplevel'},
	   {name: 'depid'   ,mapping : 'depid'},
	   {name: 'depparentid',mapping : 'depparentid'},
	   {name: 'depparentname',mapping : 'depparentname'},
	   {name: 'text', mapping:'depname'}
	];

    // create the data store
    var gridStore = new Ext.data.JsonStore({
        fields     : fields,
        url	       : 'findallorgrolesbyroleid.html',
		baseParams : {ids:roledepid},
		autoLoad   : true
	});
	window.delRecord = function(value){
		var _sel = grid.getSelectionModel().getSelections();
		
		gridStore.remove(_sel[0]);
	}
	// Column Model shortcut array
	var cols = [
		{id : 'text', header: "单位名称", width: 100, sortable: true, dataIndex: 'text'},
		{header: "上级单位名称", width: 150, sortable: true, dataIndex: 'depparentname'},
		{header: "单位编号", width: 100, sortable: true, dataIndex: 'depid'},
		{header:"删除",width:100,sorttable:true,dataIndex:'depid',renderer:function(value){
			return '<a href="#" onClick="delRecord('+value+')">删除</a>';
		}}
	];
	
	// declare the source Grid
    var grid = new Ext.grid.GridPanel({
        store            : gridStore,
        columns          : cols,
		enableDragDrop   : true,
        stripeRows       : true,
        autoExpandColumn : 'text',
        width            : 325,
		region           : 'center',
        title            : '所管理的单位',
		selModel         : new Ext.grid.RowSelectionModel({singleSelect : true})
    });
	//Simple 'border layout' panel to house both grids
	var displayPanel = new Ext.Panel({
		title:'"'+rolename+'"-主管部门管理',
		width    : 650,
		height   : 300,
		layout   : 'border',
		tbar:['->','-',
			{
				text:'保存',
				iconCls:'db-icn-add',
				handler:function(){
					var _ids = new Array();
					for (var i = 0; i < grid.getStore().getCount(); i++) {
						var _rec = grid.getStore().getAt(i);
						_ids.push(_rec.get('depid'));
					}
					Ext.Ajax.request({
						url:'updateorgroles.html',
						params:{ids:_ids.join(','),rid:roleid},
						method:'POST',
						success:function(option,response){
							var _obj = Ext.decode(option.responseText);
							if(_obj.success){
								Ext.example.msg('系统提示', '保存管理单位权限成功! ');
							}else{
								Ext.example.msg('系统提示', '保存管理单位权限失败! ');
							}
						},
						failure:function(option,response){
							Ext.example.msg('系统提示', '保存管理单位权限失败! ');
							
						}
					});
				}
			},'-',
			{
				text:'树形列表方式查看',
				iconCls:'tree',
				handler:function(){
					var _form = document.createElement('form');
					document.body.appendChild(_form);
					_form.action = 'organiserolestree.jsp';
					_form.method = 'POST'
					var _ids = document.createElement('input');
					_ids.value = roledepid;
					_ids.name = 'depids';
					_ids.type = 'hidden';
					
					var _id = document.createElement('input');
					_id.value = roleid;
					_id.name = 'id';
					_id.type = 'hidden';
					
					var _name = document.createElement('input');
					_name.value = rolename;
					_name.name = 'name';
					_name.type = 'hidden';
					
					_form.appendChild(_ids);
					_form.appendChild(_id);
					_form.appendChild(_name);
					_form.submit();
					
				}
			}
			,'-',
			{
				text:'返回权限管理',
				iconCls:'btn-login-reset',
				handler:function(){
					location.href = apppath+'/back/jsp/roles/roles.html';
				}
			}
		],
		items    : [tree,grid],
		bbar    : [
			'->', // Fill
			{
				text    : '清除重新选择',
				iconCls	: 'bin_empty',
				handler : function() {
					gridStore.loadData(myData);
				}
			},'-',
			{
				text    : '刷新列表',
				iconCls	: 'refresh',
				handler : function() {
					gridStore.reload();
				}
			}
		]
	});
	
	var _view = new Ext.Viewport({
		items:[displayPanel],
		renderTo:Ext.getBody(),
		layout:'fit'
	});
	// used to add records to the destination stores
	var blankRecord =  Ext.data.Record.create(fields);
	/****
	* Setup Drop Targets
	***/
	// This will make sure we only drop to the view container
	var formPanelDropTargetEl =  grid.body.dom;
	//
	var formPanelDropTarget = new Ext.dd.DropTarget(formPanelDropTargetEl, {
		ddGroup     : 'gridDDGroup',
		notifyEnter : function(ddSource, e, data) {
			grid.body.stopFx();
			grid.body.highlight();
		},
		notifyDrop  : function(ddSource, e, data){
			//这里添加选择的数据将选择的数据make a record 加到数据集里面
			var node = ddSource.dragData.node;
			//判断是否选择了同一个部门,不允许选择同一个部门!
			var _ishave = false;
			for (var i = 0; i < grid.getStore().getCount(); i++) {
				var _rec = grid.getStore().getAt(i);
				if(_rec.get('depid')==node.attributes.depid)
				{
					_ishave = true;
					break;
				}
			}
			if(_ishave){
				Ext.example.msg('系统提示', '您已经有管理这个" {0} "部门(单位)的权限了! ', node.attributes.text);
				return;
			}
			var Department = grid.getStore().recordType;
            var dep = new Department({
                deplevel: node.attributes.deplevel,
                depid: node.attributes.depid,
                depparentid: node.attributes.depparentid,
                depparentname: node.attributes.depparentname,
                text: node.attributes.text
            });
            gridStore.insert(0,dep);
			return(true);
		}
	});


});

  • 大小: 16.1 KB
0
2
分享到:
评论
2 楼 peter2009 2011-07-30  
我参考着Ext3 的 例子
搞定了
谢谢哈
/*!
 * Ext JS Library 3.2.1
 * Copyright(c) 2006-2010 Ext JS, Inc.
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.onReady(function(){
	//创建tree 
	var tree = new Ext.tree.TreePanel({
		ddGroup          : 'gridDDGroup',
		title:'全部的组织机构',
	    animate:true, 
	    autoScroll:true,
	    loader:new Ext.tree.TreeLoader({
			dataUrl: apppath+'/back/jsp/organise/findalldepartment.html',
			listeners:{
			      'beforeload':function(treeloader,node){
			        	this.baseParams.depparentid = node.attributes.depid;
			       }
			}
		}),
		root: new Ext.tree.AsyncTreeNode({
			depid:157,iconCls:'depicon',
			text:'集团',id:'157'
		}),
	    enableDD:true,
	    containerScroll: true,
	    border : true,
	    width  : 250,
	    height : 300,
	    region : 'west',
	    listeners:{'nodedrop':function(e){}},
	    dropConfig: {appendOnly:true}
	});
	tree.getRootNode().expand();
	//创建GridPanel
    var myData = [];
	
	var fields = [
	   {name: 'deplevel',mapping : 'deplevel'},
	   {name: 'depid'   ,mapping : 'depid'},
	   {name: 'depparentid',mapping : 'depparentid'},
	   {name: 'depparentname',mapping : 'depparentname'},
	   {name: 'text', mapping:'depname'}
	];

    // create the data store
    var gridStore = new Ext.data.JsonStore({
        fields     : fields,
        url	       : 'findallorgrolesbyroleid.html',
		baseParams : {ids:roledepid},
		autoLoad   : true
	});
	window.delRecord = function(value){
		var _sel = grid.getSelectionModel().getSelections();
		
		gridStore.remove(_sel[0]);
	}
	// Column Model shortcut array
	var cols = [
		{id : 'text', header: "单位名称", width: 100, sortable: true, dataIndex: 'text'},
		{header: "上级单位名称", width: 150, sortable: true, dataIndex: 'depparentname'},
		{header: "单位编号", width: 100, sortable: true, dataIndex: 'depid'},
		{header:"删除",width:100,sorttable:true,dataIndex:'depid',renderer:function(value){
			return '<a href="#" onClick="delRecord('+value+')">删除</a>';
		}}
	];
	
	// declare the source Grid
    var grid = new Ext.grid.GridPanel({
        store            : gridStore,
        columns          : cols,
		enableDragDrop   : true,
        stripeRows       : true,
        autoExpandColumn : 'text',
        width            : 325,
		region           : 'center',
        title            : '所管理的单位',
		selModel         : new Ext.grid.RowSelectionModel({singleSelect : true})
    });
	//Simple 'border layout' panel to house both grids
	var displayPanel = new Ext.Panel({
		title:'"'+rolename+'"-主管部门管理',
		width    : 650,
		height   : 300,
		layout   : 'border',
		tbar:['->','-',
			{
				text:'保存',
				iconCls:'db-icn-add',
				handler:function(){
					var _ids = new Array();
					for (var i = 0; i < grid.getStore().getCount(); i++) {
						var _rec = grid.getStore().getAt(i);
						_ids.push(_rec.get('depid'));
					}
					Ext.Ajax.request({
						url:'updateorgroles.html',
						params:{ids:_ids.join(','),rid:roleid},
						method:'POST',
						success:function(option,response){
							var _obj = Ext.decode(option.responseText);
							if(_obj.success){
								Ext.example.msg('系统提示', '保存管理单位权限成功! ');
							}else{
								Ext.example.msg('系统提示', '保存管理单位权限失败! ');
							}
						},
						failure:function(option,response){
							Ext.example.msg('系统提示', '保存管理单位权限失败! ');
							
						}
					});
				}
			},'-',
			{
				text:'树形列表方式查看',
				iconCls:'tree',
				handler:function(){
					var _form = document.createElement('form');
					document.body.appendChild(_form);
					_form.action = 'organiserolestree.jsp';
					_form.method = 'POST'
					var _ids = document.createElement('input');
					_ids.value = roledepid;
					_ids.name = 'depids';
					_ids.type = 'hidden';
					
					var _id = document.createElement('input');
					_id.value = roleid;
					_id.name = 'id';
					_id.type = 'hidden';
					
					var _name = document.createElement('input');
					_name.value = rolename;
					_name.name = 'name';
					_name.type = 'hidden';
					
					_form.appendChild(_ids);
					_form.appendChild(_id);
					_form.appendChild(_name);
					_form.submit();
					
				}
			}
			,'-',
			{
				text:'返回权限管理',
				iconCls:'btn-login-reset',
				handler:function(){
					location.href = apppath+'/back/jsp/roles/roles.html';
				}
			}
		],
		items    : [tree,grid],
		bbar    : [
			'->', // Fill
			{
				text    : '清除重新选择',
				iconCls	: 'bin_empty',
				handler : function() {
					gridStore.loadData(myData);
				}
			},'-',
			{
				text    : '刷新列表',
				iconCls	: 'refresh',
				handler : function() {
					gridStore.reload();
				}
			}
		]
	});
	
	var _view = new Ext.Viewport({
		items:[displayPanel],
		renderTo:Ext.getBody(),
		layout:'fit'
	});
	// used to add records to the destination stores
	var blankRecord =  Ext.data.Record.create(fields);
	/****
	* Setup Drop Targets
	***/
	// This will make sure we only drop to the view container
	var formPanelDropTargetEl =  grid.body.dom;
	//
	var formPanelDropTarget = new Ext.dd.DropTarget(formPanelDropTargetEl, {
		ddGroup     : 'gridDDGroup',
		notifyEnter : function(ddSource, e, data) {
			grid.body.stopFx();
			grid.body.highlight();
		},
		notifyDrop  : function(ddSource, e, data){
			//这里添加选择的数据将选择的数据make a record 加到数据集里面
			var node = ddSource.dragData.node;
			//判断是否选择了同一个部门,不允许选择同一个部门!
			var _ishave = false;
			for (var i = 0; i < grid.getStore().getCount(); i++) {
				var _rec = grid.getStore().getAt(i);
				if(_rec.get('depid')==node.attributes.depid)
				{
					_ishave = true;
					break;
				}
			}
			if(_ishave){
				Ext.example.msg('系统提示', '您已经有管理这个" {0} "部门(单位)的权限了! ', node.attributes.text);
				return;
			}
			var Department = grid.getStore().recordType;
            var dep = new Department({
                deplevel: node.attributes.deplevel,
                depid: node.attributes.depid,
                depparentid: node.attributes.depparentid,
                depparentname: node.attributes.depparentname,
                text: node.attributes.text
            });
            gridStore.insert(0,dep);
			return(true);
		}
	});


});

1 楼 babydeed 2011-07-28  
少了很多很多

以下代码还需修改 你自己改改吧
        <script type="text/javascript">
Ext.onReady(function(){

var tree = new Ext.tree.TreePanel({
				title:'全部的组织机构',
                animate:true, 
				el:"tree",
                autoScroll:true,
                loader: new Ext.tree.TreeLoader(),
                enableDD:true,
                containerScroll: true,
                border: true,
                width: 250,
                height: 300,
				ddGroup:"xx"
                //,dropConfig: {appendOnly:true}
            });
var root = new Ext.tree.TreeNode({
                text: 'Ext JS1', 
                draggable:false, // disable root node dragging
                id:'src'
          }); 
var node1 = new Ext.tree.TreeNode({
                text: 'Ext JS2', 
                draggable:true, // disable root node dragging
                id:'src'
          }); 
var node2 = new Ext.tree.TreeNode({
                text: 'Ext JS', 
                draggable:true, // disable root node dragging
                id:'src'
          }); 

root.appendChild(node1);
root.appendChild(node2);
 var grid = new Ext.grid.GridPanel(
 	{
 		store:new Ext.data.JsonStore({
 			data:[{id:'1',name:'aa'},{id:'2',name:'bb'}],
 			autoLoad:true,
 			fields:['id','name']
 		}),
		renderTo:"g",
		ddGroup:"xx",
 		enableDragDrop: true,  
 		//draggable:true, 
 		cm:new Ext.grid.ColumnModel([{dataIndex:'id',header:'编号'},{dataIndex:'name',header:'名称'}]),
 		width:250,
 		height:300
 	}
 );
tree.setRootNode(root);

var f = Ext.data.Record.create([
		{name: 'id', type: 'string'},
		{name: 'name', type: 'name'}
]);

var dropZone = new Ext.dd.DropZone(grid.getEl(),{ 
        ddGroup: 'xx', 
        notifyDrop: function(source, e, obj) { 
			var r = new f({"id":obj.node.id,"name":obj.node.text});
               grid.store.add(r)

        } 
});  

    tree.render();

    root.expand(true, true);

});
        </script>
    </head>
    <body>
        <div id="tree" style="height:300px;"></div>
		<div id="g" style="height:300px;"></div>
    </body>
</html>

相关推荐

    ext的tree两个拖拽例子

    在EXT JS这个强大的JavaScript框架中,TreePanel是用于展示层级数据的一个组件,它通常用于构建树形结构,例如文件系统、组织结构等。本主题主要关注EXT的TreePanel中的拖放(Drag and Drop)功能,这是一项允许用户...

    gwt-ext-tree

    在实际开发中,`exttree` 文件可能是这个库的一个示例或者实现文件,包含了使用 GWT-Ext-Tree 创建树形结构的代码。通过对这个文件的学习和理解,开发者可以更好地掌握如何在项目中集成和使用 GWT-Ext-Tree 组件。 ...

    ext4 四种常见的tree

    2. **可拖拽的tree**:在这样的tree中,用户可以直观地通过拖放操作来改变节点的位置,重新组织tree的结构。这种功能常用于需要自定义排序或者调整层次关系的应用场景,如项目管理工具或文件管理系统。实现时需要...

    ext tree json 例子(不含EXT包)

    "ext tree json 例子(不含EXT包)"这个标题暗示我们将讨论如何在不直接引用EXT完整包的情况下,仅使用EXT JS中关于TreePanel和JSON解析的部分来构建一个动态的树形结构。这可能涉及到手动引入EXT的核心组件,如...

    Ext中拖拽Tree2Grid , 清空表格拖拽失效的解决办法>.<

    本文将深入探讨一个具体的使用场景——如何实现从Tree组件到Grid组件的拖拽功能,并解决在清空Grid后拖拽功能失效的问题。这个问题在实际开发中可能会遇到,尤其是在需要动态管理数据的界面中。 首先,EXTJS的Tree...

    完成Ext 拖拽树后对新的树节点顺序进行保存

    在IT领域,拖拽功能是用户界面中常见的一种交互方式,尤其在数据可视化和管理工具中,例如ExtJS的树形组件(Tree)。本项目主要关注如何在完成拖拽操作后,更新并保存树节点的新顺序。ExtJS是一个强大的JavaScript库...

    完成Ext tree 拖拽节点到 textfield 控件中

    以前有许多人需要将 tree 的节点拖拽到其他控件中的问题,前段时间已经解决了,现在也将它的源代码贡献上来。 这个树的数据是静态的,没有做动态的,而且树节点的拖拽也没有做过多的处理,如果要知道怎么样做树...

    Ext拖动实例树和表格全 超实用

    通过对Ext JS中树(Tree)和表格(Grid)控件拖拽功能的研究,我们可以看到其实现的核心在于正确配置拖动源和目标对象的相关属性,并利用`DragSource`和`DropTarget`这两个关键类来实现整个拖拽流程。掌握了这些原理和...

    Ext实现的拖拽树的测试例子

    本文将详细探讨如何使用ExtJS库实现拖拽树(Drag and Drop Tree)的功能,以及如何在实际项目中进行测试。 首先,ExtJS是一个强大的JavaScript框架,它提供了丰富的组件和功能,用于构建富客户端的Web应用程序。在...

    EXT 控件拖动例子

    EXTJS 是一个强大的JavaScript 应用程序框架,用于构建富客户端Web应用。..."EXT 控件拖动例子"项目提供的代码可能涵盖了从基础的拖放实现到复杂的动态布局调整的完整流程,是学习EXTJS高级特性的宝贵资源。

    Ext拖动实例树和表格全

    根据提供的信息,我们可以深入探讨Ext JS中的拖动功能,特别是针对树(Tree)和表格(Grid)的拖动操作。本文将详细介绍这些概念和技术要点。 ### 一、Ext JS 拖动的基本概念 #### 1.1 拖动源与目标 在Ext JS中,拖动...

    ext4.2 目录树

    由于项目的需要最近在学习ext,在项目中必不可少用到了tree,并且要对tree进行增、改、删的操作。上网找了很多不错的学习资料把这些功能组织在一起。在学习ext的过程中花了不少时间,我想很多网友刚开始学习ext的...

    Ext用户扩展控件-------支持树上多个节点和叶子的拖动

    "Ext用户扩展控件-------支持树上多个节点和叶子的拖动"是EXT JS中的一个高级特性,它增强了EXT JS的树形控件(TreePanel),允许用户通过拖放操作在树结构中移动多个节点和叶子。这一功能对于数据组织和展示特别...

    Ext实现的拖拽树和表格之间的拖拽

    在本文中,我们将深入探讨如何使用ExtJS框架实现拖拽功能,特别是在树形视图(Tree)和表格视图(Grid)之间的交互。ExtJS是一个强大的JavaScript库,它提供了丰富的用户界面组件,包括可拖拽的元素,这使得在Web...

    ext treegrid

    Ext TreeGrid是一款在Ext JS框架下开发的组件,它结合了Tree和Grid的优点,提供了一种既能展示层次结构数据又能进行表格样式的显示和操作的视图。在Ext JS库中,Tree通常用于展现层级关系的数据,而Grid则用于显示二...

    ExtJS4官方指南翻译:DragandDrop拖放/Grid组件/Tree组件/容器与布局

    拖放功能通过`Ext.dd`和`Ext.util.Draggable`等类实现,这些类提供了事件监听和处理机制,使得开发者能够轻松实现自定义的拖放行为。 2. **Grid组件**: Grid组件是ExtJS4中的一个核心组件,用于展示大量结构化的...

    Ext 开发指南 学习资料

    4.8. 关于表单内部控件的布局问题 4.8.1. 什么都不做,默认的平铺布局 4.8.2. 分裂,分列 4.8.3. fieldset是个神奇的东西 4.8.4. 当某一天,需要往form加个图片什么的,该咋办? 4.9. 还要做文件上传哟 4.10. 非想非...

    treePanel到panel的拖拽 等等操作详细,及步骤

    本文详细介绍了如何使用Ext JS框架实现从TreePanel到Panel的拖拽功能。通过深入分析代码示例,我们了解了整个实现过程的关键步骤。这种交互方式不仅能够提高用户界面的友好度,还能够使应用更加灵活多变,满足不同...

    Ext例子及布局问题

    即:Ext.window 4.mainPage.html为tab布局,右面为tree中间为tab页面。 5.tz-normal-test.html为普通拖拽的练习。 6.tree-asynch-test.html为异步加载的树 7.tree-edit-test.html为节点可以编辑的树 8.tree-tz-test....

    EXT2.0中文教程

    4.8. 关于表单内部控件的布局问题 4.8.1. 什么都不做,默认的平铺布局 4.8.2. 分裂,分列 4.8.2.1. 分裂,分列。1.x 4.8.2.2. 分裂,分列。2.0 4.8.3. fieldset是个神奇的东西 4.8.4. 当某一天,需要往form加个图片...

Global site tag (gtag.js) - Google Analytics