日期:2014-05-16  浏览次数:20408 次

extjs实现treepanel到panel布局的拖拽




一下是树的实现代码:
var mytree=new Ext.tree.TreePanel({
			
		    animate:true,// 以动画形式伸展,收缩子节点
		   enableDD: true,
		   ddGroup:'mygroup',
		   rootVisible:true,// 是否显示根节点
		   autoScroll:true,
		   bodyStyle: 'background-color: #dfe8f6;',
		   height:300,
		   width:180,
		   renderTo : 'treePanel',
		   lines:true,// 节点之间连接的横竖线
		   dataUrl:getWebRoot()+"/jsp/splitScreen/getAppuserStations.faces",
		   root:{
				nodeType: 'async',
				draggable: false,
				expand:true,
		   id:"root",
		       text:"台站功能"
			}
		    
	});

以下是panel布局的实现代码:
var tablePanel = new Ext.Panel({
		
		id: 'splitScreenPanel',
		border: false,
		renderTo:'tablePanel',
		layout: {
			type: 'vbox',
			align: 'stretch'
		},
		defaults: {
			bodyStyle: 'background-color: #dfe8f6;'
			
		},
		frame:true,
		height:300,
		width:300,
		items: [{
			flex:0.3,
			layout: {
				type: 'hbox',
				align: 'stretch'
			},
			defaults: {
				frame:true
			},	
			items:[myForm]
			},{
			flex: 1,
			layout: {
				type: 'hbox',
				align: 'stretch'
			},
			margins: '0 0 5 0',
			defaults: {
				ddGroup: 'mygroup',
				tools:getTools,
				listeners: {
					render:renderHander
				},	
				frame:true
			},
			items: [{
				id: 'Screen1',
				title: '一',
				flex: 1,
				margins: '0 5 0 0',
				html : "<div id='div1'></div>"
			}, {
				id: 'Screen2',
				title: '二',
				flex: 1,
				html : "<div id='div2'></div>"
			}]
		}]
	});
	if(splitNum==4){
		tablePanel.add({
			flex: 1,
			layout: {
				type: 'hbox',
				align: 'stretch'
			},
			defaults: {
				ddGroup: 'mygroup',
				tools:getTools,
				listeners: {
					render:renderHander
				},	
				frame:true
			},
			items: [{
				id: 'Screen4',
				title: '三',
				flex: 1,
				margins: '0 5 2 0',
				html : "<div id='div4'></div>"
			}, {
				id: 'Screen5',
				title: '四',
				flex: 1,
				margins: '0 0 2 0',
				html : "<div id='div5'></div>"
			}]
		});
	}else{
		tablePanel.add({
				flex: 1,
				layout: {
				type: 'hbox',
				align: 'stretch'
			},
			defaults: {
				ddGroup: 'mygroup',
				tools:getTools,
				listeners: {
				render:renderHander
			},	
			frame:true
			},
			items: [{
				id: 'Screen3',
				title: '三',
				flex: 1,
				margins: '0 0 2 0',
				html : "<div id='div3'></div>"
			}]
		});
	}
	tablePanel.doLayout();
动态实现了分几块。
分屏上的按钮:
var getTools= [{
				id: 'search',
				qtip: '编辑',
				handler: function(event, toolEl, panel) {
										searchConditionWin.show();	
				}	
			},{	id: 'close',
				qtip: '删除',
				handler: function(event, toolEl, panel) {
					getDefault(panel.id);
			    }
			 }
		];

拖动处理函数:
var renderHander = function(cmp) {
		new Ext.dd.DropTarget(cmp.body.dom, {
			ddGroup: 'mygroup',
			notifyDrop: function(ddSource, e, data) {
				if (!data.node.hasChildNodes()) {
					cmp.setTitle(data.node.parentNode.attributes.text);
									}
				return true;
			}
		});
	};

主要实现就是把要拖动的东西放到一个组里,然后加上一个拖动处理函数