<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    云自無心水自閑

    天平山上白云泉,云自無心水自閑。何必奔沖山下去,更添波浪向人間!
    posts - 288, comments - 524, trackbacks - 0, articles - 6
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Flex2中遍歷Tree節(jié)點

    Posted on 2007-01-07 14:37 云自無心水自閑 閱讀(3485) 評論(1)  編輯  收藏 所屬分類: FlexFlex2

    這個函數(shù)只是一個示例函數(shù),演示如何遍歷一個Tree。
    此函數(shù)嚴格說起來其實是兩個函數(shù):上半部分用于回溯父節(jié)點,下半部分遞歸遍歷子節(jié)點

    /**
    ?* 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();
    ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? }
    }
    ?



    ?




    評論

    # re: Flex2中遍歷Tree節(jié)點  回復  更多評論   

    2007-02-08 11:03 by 永恒
    恩,很好的深度遍歷算法,可以再寫個廣度樹遍歷的實現(xiàn)
    主站蜘蛛池模板: 校园亚洲春色另类小说合集| 久久久精品免费国产四虎| 亚洲人成无码www久久久| 无码日韩精品一区二区免费暖暖| 亚洲冬月枫中文字幕在线看 | 国产大片线上免费看| 成人电影在线免费观看| 亚洲中文无码卡通动漫野外 | 久久精品国产亚洲AV嫖农村妇女 | 亚洲一区精品无码| 97人妻无码一区二区精品免费| 国产亚洲福利一区二区免费看| 亚洲AV无码成人精品区在线观看 | 亚洲午夜久久久久久噜噜噜| AA免费观看的1000部电影| yellow免费网站| 亚洲乱码一二三四区国产| 中文字幕第一页亚洲| 最近免费中文字幕视频高清在线看| 久久国产乱子伦精品免费午夜 | 久久er国产精品免费观看2| 亚洲精品乱码久久久久蜜桃| 亚洲AV本道一区二区三区四区| 免费中文字幕一级毛片| 国产成人精品免费视频动漫 | 一区二区亚洲精品精华液| 亚洲av中文无码乱人伦在线r▽| 日本媚薬痉挛在线观看免费| 18以下岁毛片在免费播放| 国产成人精品免费视频大全| 亚洲色大成网站www| 亚洲卡一卡2卡三卡4麻豆| 亚洲精品乱码久久久久久中文字幕 | a级毛片黄免费a级毛片| 18禁亚洲深夜福利人口| 亚洲人成777在线播放| 亚洲成AV人片在线观看ww| 亚洲综合国产一区二区三区| 四虎影视在线永久免费看黄| 性一交一乱一视频免费看| 毛色毛片免费观看|