Hi, all,

In Flex 3 I have a Tree control that is doing dynamic loading of 
children. To simplify: I do a search that retrieves a root set of 15 
folders. When I click on a folder, a function executes that retrieves 
the children and expands the folder to reveal them. This works 
correctly - the tree now displays the original 15 folders plus all 
the children of the folder I clicked on. 

On the other hand, if instead of clicking on the folder, I click on 
the plus sign (or on Mac the triangle) to the left of the folder, the 
folder opens and displays items, but the total number of items 
displaying in the tree is only 15 (the same number as the original 
number of folders) - so some of the folders disappear, and only a few 
children display in the open folder. If I close the folder using the 
minus and reopen it with the plus, all the items that should be 
displaying do then appear (i.e., the 15 folders plus all the 
children).

What is odd is that I am using basically the same function for both 
events, the main difference being the event that is being passed to 
it.

Here are the two functions:

private function handleTreeChange( event:Event ):void
 {
   var selectedItem:Object = Tree( event.target ).selectedItem;
                                
   if( selectedItem is FolderNode )
        fetchFolderInfo( FolderNode( selectedItem ) );
 }
                        
private function handleRetrieve( event:TreeEvent ):void
  {     
  if( event.item is FolderNode && event.opening )
   fetchFolderInfo( FolderNode( event.item) );
  } 

private function fetchFolderInfo( folder:FolderNode ):void
 {
  //Items contains the children of the FolderNode
  //so if the folder already has items, don't go doing
 // the whole search thing
  if( folder.Items.length != 0 )
        return;
                                        
  loadingPanel.visible = true;
                        
  catalogTreeGenerator.getFoldersOrStyles(theRootDBName, folder.Id, 
theCatalogFKName);
  catalogTreeGenerator.addEventListener("nonRootItemsArrayReady", 
addFolderItems);
                        
   function addFolderItems(e:Event):void{       
      folder.Items = new ArrayCollection(e.currentTarget.fsItems as 
Array );
        catalogTree.validateNow();
        catalogTree.expandItem( folder, true, true, false );    
        loadingPanel.visible = false;                           
        catalogTreeGenerator.removeEventListener
("nonRootItemsArrayReady", addFolderItems);
                    }
          }

Can anyone shed any light on why clicking on the plus next to a 
folder the first time (doing the handleRetrieve function triggered 
by "itemOpening" event) would cause the tree to only display a number 
of items equal to the original number of folders, when clicking on 
the folder itself (doing the handleTreeChange function triggered 
by "change" event) causes the tree to display all the appropriate 
items?

Thanks very much for any help. 

-Flummoxed flex_geeklet


Reply via email to