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>


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章