Book Shelf
Our Products
Component News
Stay informed on our latest component releases and specials.
Walking the Tree
/** * This method will traverse a Tree's model independent of it's * type. * * <p>Note :: This method may look long and arduous but, rest assured * it has all the checks to perform like a champ. Also, you 'could' * refactor part of this method but, for the sake of explanation, I * kept it all in one place.</p> * * <p>Remember, I had coupled the model to this method by tracing * @label, obviously you do not need to do this. The intention of * this example is to show you that the dataDescriptor seperates * the models type and is awesome. It enables you to create a tight * method like this without type checks on the model.</p> * * @param tree The Tree instance that will be examined by the method. * @param item An item found in the dataProvider of the Tree passed in. * @param startAtParent A boolean that determines if the method upon * initialization will back up one leve3l to the item passed in and * start it's recursion at the item's parent node. */ public function walkTree(tree:Tree, item:Object, startAtParent:Boolean = false):void { // get the Tree's data descriptor var descriptor:ITreeDataDescriptor = tree.dataDescriptor; var cursor:IViewCursor; var parentItem:Object; var childItem:Object; var childItems:Object; // if the item is null, stop if (item == null) return; // do we back up one level to the item's parent if (startAtParent) { // get the parent parentItem = tree.getParentItem(item); // is the parent real if (parentItem) { trace("|-- Parent Node ", parentItem[tree.labelField]); // if the parent is a branch if (descriptor.isBranch(parentItem)) { // if the branch has children to run through if (descriptor.hasChildren(parentItem)) { // get the children of the branch // this part of the algorithm contains the item // passed childItems = descriptor.getChildren(parentItem); } } // if the branch has valid child items if (childItems) { // create our back step cursor cursor = childItems.createCursor(); // loop through the items parent's children (item) while (!cursor.afterLast) { // get the current child item childItem = cursor.current; var label:String = childItem[tree.labelField]; var branch:Boolean = descriptor.isBranch(childItem); // good place for a custom method() trace("Sibling Nodes :: ", label, "Is Branch :: ", branch); // if the child item is a branch if (descriptor.isBranch(childItem)) // traverse the childs branch all the way down // before returning walkTree(tree, childItem); // do it again! cursor.moveNext(); } } } } else // we don't want the parent OR this is the second iteration { // if we are a branch if (descriptor.isBranch(item)) { // if the branch has children to run through if (descriptor.hasChildren(item)) { // get the children of the branch childItems = descriptor.getChildren(item); } // if the child items exist if (childItems) { // create our cursor pointer cursor = childItems.createCursor(); // loop through all of the children // if one of these children are a branch we will recurse while (!cursor.afterLast) { // get the current child item childItem = cursor.current; var label:String = childItem[tree.labelField]; var branch:Boolean = descriptor.isBranch(childItem); // good place for a custom method() trace("-- Sub Node :: ", label, "Is Branch :: ", branch); // if the child item is a branch if (descriptor.isBranch(childItem)) // traverse the childs branch all the way down // before returning walkTree(tree, childItem); // check the next child cursor.moveNext(); } } } } }
Privacy Policy | Copyright Notice| Disclaimer| Product EULA
©2003-2008 Teoti Graphix, LLC - All rights reserved.
©2003-2008 Teoti Graphix, LLC - All rights reserved.

Thank you for sharing! I
Thank you for sharing! I will use this code in my prooject!