`

关于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的tree两个拖拽例子,话不多说,详见代码

    ext4 四种常见的tree

    自己整理的ext涉及的四种常见的tree 1.一次加载所有结点 2.可拖拽的tree 3.动态加载结点,每次展开结点需向后台获取数据 4.可维护的tree 结点维护

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

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

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

    NULL 博文链接:https://2o12.iteye.com/blog/1169874

    ext4.2 目录树

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

    Ext 开发指南 学习资料

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

    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....

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

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

    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加个图片...

    EXT 布局 tab布局 普通拖拽 异步加载的树 节点可以编辑的树

    即: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-...

    ext.net-extjs

    再加上可编辑grid,添加新行,删除一或多行,提示多行数据,拖拽改变grid大小,grid之间拖拽一或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件...

    Ext js 教程大全

    再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间拖拽一或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件里...

    EXT教程EXT用大量的实例演示Ext实例

    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加...

    Ext Js权威指南(.zip.001

    7.5.11 树节点:ext.data.nodeinterface与ext.data.tree / 364 7.5.12 store的方法 / 366 7.5.13 store的事件 / 368 7.5.14 store管理器:ext.data.storemanager / 369 7.6 综合实例 / 369 7.6.1 远程读取json...

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

    treePanel到panel的拖拽 直接动态拖拽等操作,涉及到的代码,和效果图片都在word文档里面

    EXTjs 简单布局实例

    menuTree:new Ext.tree.TreePanel({ title:'功能菜单', region:'west', bodyStyle:'background:transparent url(images/default/panel/group-lr.gif) repeat-x 0 bottom;', id:'extExample-tree', autoScroll:true, ...

    深入浅出Ext JS

     再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间推拽一或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件...

    自己用ssh2 和 ext 做的简单oa

    可以把grid直接拖到tree,不同于其他的例子,拖动grid后会在tree中加一个叶子节点,大家试下就会明白。 自己练习用的哦,做的不好不要骂我,哪里不好希望大家包涵。 本人qq :784027965 大家学习happy哈^_^

    Ext js-2.0 带API

     再加上可编辑grid,添加新行,删除一或多行,提示脏数据,推拽改变grid大小,grid之间推拽一或多行,甚至可以在tree和grid之间进行拖拽,啊,这些功能实在太神奇了。更令人惊叹的是,这些功能竟然都在ext表格控件...

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

    支持用shift和ctrl来选择用户要拖动的树的节点和叶子。 功能非常强大。

Global site tag (gtag.js) - Google Analytics