Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Проблемы с PopUpButton в mx:Tree. (http://www.flasher.ru/forum/showthread.php?t=115261)

Alexandor1984 25.08.2008 01:32

Проблемы с PopUpButton в mx:Tree.
 
Вложений: 1
Не могу понять: толи баг в SDK, толи у меня баг.
Есть mxml файлик

Код:

<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:XMLList id="_xmlListBlock">
        <node label="Mail Box">
              <node label="Marketing"/>
        </node>   
    </mx:XMLList>

<mx:Tree selectable="false" itemRenderer="com.asComponents.CustomTreeItemRenderer" dataProvider="{_xmlListBlock}" showRoot="true" labelField="@label" width="481" x="10" height="264" y="10"></mx:Tree>
</mx:Application>

А также есть реализация CustomTreeItemRenderer

Код:

package com.asComponents
{
        import mx.controls.Alert;
        import mx.controls.treeClasses.*;

        public class CustomTreeItemRenderer extends TreeItemRenderer
        {
                private var _button:TreePopUpButton;
               
                public function CustomTreeItemRenderer()
                {
                        super();
                }
       
                override protected function createChildren():void
                {
                        super.createChildren();
           
                        _button = new TreePopUpButton();
                        _button.x = 180;
                        _button.y = -1;
           
                        this.addChild(_button);           
                }
   
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                {
                        super.updateDisplayList(unscaledWidth, unscaledHeight);
                       
                        if(super.data)
                        {
                                if(TreeListData(super.listData).hasChildren)
                                {
                                        _button.visible = false;
                                }
                                else
                                {
                                        _button.visible = true;
                                        _button.Node = TreeListData(super.listData);
                                }
                        }
                }
       
        }// class
}// package

И последний файлик TreePopUpButton

Код:

package com.asComponents
{
        import mx.containers.VBox;
        import mx.controls.PopUpButton;
        import mx.controls.treeClasses.TreeListData;
        import mx.core.UIComponent;
       
        public class TreePopUpButton extends PopUpButton
        {
                private var _node:TreeListData;
                               
                public function TreePopUpButton()
                {
                        this.width = 110;
                        this.height = 20;
                        this.setStyle("cornerRadius", 0);
                        this.openAlways = true;
                        this.label = "Click";
                }
               
                // getter for node data
                [Bindable]
                public function get Node():TreeListData
                {
                        return _node;
                }
       
                // setter for node data
                public function set Node(value:TreeListData):void
                {
                        if (!_node)
                        {
                                this._node = value;
                                this.popUp = getCustomPopUp(XMLList(_node.item));                       
                        }
                }
                private function getCustomPopUp(list:XMLList):UIComponent
                {
                        var result:VBox = new VBox();               
               
                        result.setStyle("backgroundColor", "#E8E4E4");
                        result.width = this.width;
                        result.height = 50;
               
                        return result;
                }
       
        }
}

И, собственно, вопрос:
Когда в открытом ноде mx:Tree открыть PopUpButton, а затем закрыть эту же ноду, то popUp остается на сцене и, конечно же, все ломается.

Как исправить этот глюк?
Вот исхидничек


Часовой пояс GMT +4, время: 11:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.