Flex tree 限制节点同级间拖拽

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">     
	   <mx:Script> 
		   <![CDATA[                   
		   import mx.events.DragEvent;     
		   import mx.managers.DragManager;      
		   import mx.core.DragSource;          
		   import mx.core.UIComponent;          
		   import mx.controls.Tree;              
		   private var _draggedItem:XML = null;   
		   private function onDragEnter( event:DragEvent ) : void    
		   {                 
			   event.preventDefault();        
			   event.currentTarget.hideDropFeedback(event);  
			   var ds:DragSource = event.dragSource;         
			   var items:Array = ds.dataForFormat("treeItems") as Array;  
			   if (items != null && items.length > 0 && (items[0] is XML))     
				   _draggedItem = items[0];                       
			   DragManager.acceptDragDrop(UIComponent(event.currentTarget));     
		   }                   
			   private function onDragOver( event:DragEvent ) : void    
			   {                 
				   event.preventDefault();                
				   event.currentTarget.hideDropFeedback(event);        
				   tree.selectedIndex = tree.calculateDropIndex(event);    
				   var node:XML = tree.selectedItem as XML;                 
				   // restrict drag & drop to nodes within same parent     
				   if (_draggedItem.parent() != node.parent())              
				   {                   
					   DragManager.showFeedback(DragManager.NONE);    
					   
					   return;          
				   }                      
				   DragManager.showFeedback(DragManager.MOVE);
			   }    
			   
			   private function onDragDrop( event:DragEvent ) : void    
			   {                
				   event.preventDefault();             
				   event.currentTarget.hideDropFeedback(event);     
				   tree.selectedIndex = tree.calculateDropIndex(event); 
				   var node:XML = tree.selectedItem as XML;                        
				   var addToIndex:int = node.childIndex();         
				   if ((_draggedItem.parent() == node.parent()) && (addToIndex != _draggedItem.childIndex()))          
				   {   
					   tree.dataDescriptor.removeChildAt(node.parent(), _draggedItem, _draggedItem.childIndex());       
					   tree.dataDescriptor.addChildAt(node.parent(), _draggedItem, addToIndex);            
				   }       
			   }                    
			   private function onDragComplete( event:DragEvent ) : void           
			   {                
				   tree.selectedIndex = -1;      
			   }            
		   ]]>   
	   </mx:Script>       
	<mx:XML id="treeData" xmlns="">     
		<root>             
			<node label="Massachusetts" type="state" data="MA">    
				<node label="Boston" type="city" >             
					<node label="Smoke House Grill" type="restaurant" />      
					<node label="Equator" type="restaurant" />              
					<node label="Aquataine" type="restaurant" />               
					<node label="Grill 23" type="restaurant" />              
				</node>                
				<node label="Provincetown" type="city" > 
					<node label="Lobster Pot" type="restaurant" />             
					<node label="The Mews" type="restaurant" />             
				</node>           
				</node>      
			<node label="California" type="state" data="CA">   
				<node label="San Francisco" type="city" >        
					<node label="Frog Lane" type="restaurant" />        
				</node>        
			</node>      
		</root>   
	</mx:XML>
   <mx:Tree width="100%" height="100%" id="tree"    
			labelField="@label"   
			dataProvider="{treeData.node}"      
			allowMultipleSelection="false"   
			dragEnabled="true"      
			dropEnabled="true"       
			dragMoveEnabled="false" 
			dragEnter="onDragEnter(event)"      
			dragOver="onDragOver(event)"      
			dragDrop="onDragDrop(event)"      
			dragComplete="onDragComplete(event)"/>  
</mx:Application>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值