Alexandor1984
25.08.2008, 01:32
Не могу понять: толи баг в 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 остается на сцене и, конечно же, все ломается.
Как исправить этот глюк?
Вот исхидничек
Есть 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 остается на сцене и, конечно же, все ломается.
Как исправить этот глюк?
Вот исхидничек