在我的应用程序中,我有一个图表,我希望在点击时显示在TitleWindow中。
var win:TitleWindow = PopUpManager.createPopUp(this, TitleWindow, false) as TitleWindow;
win.addChild(myChart);
PopUpManager.bringToFront(win);
它确实将图表放在显示的标题窗口中,但它从父窗口中删除了原始图表。然后,当标题窗口关闭时,我的图表就会消失。我无法弄清楚如何克隆图表 - 我尝试过的所有方法都失败了 - 我不知道为什么会发生这种情况。
解决方案:
public var barChart:BarChart;
public function onClick(e:Object):void
{
barChart = (e as BarChart);
if(barChart != null)
{
var win:MyWindow = PopUpManager.createPopUp(this, MyWindow, false) as MyWindow;
PopUpManager.centerPopUp(win);
}
}
// ... MyWindow.mxml ...
var _parent:Object;
private function creationComplete(e:Event):void
{
bChart = parentApplication.barChart;
_parent = bChart.parent;
this.addChild(bChart);
}
private function onMyWindowClose(evt:CloseEvent):void {
_parent.addChild(bChart);
PopUpManager.removePopUp(this);
}
答案 0 :(得分:0)
我还没有设法找到支持它的文档,但我相信Flash UI组件只能有一个父组件。当你调用addChild()时,我怀疑控件的parentage会改变,它会从另一个窗口中消失。由于父母已经更改,因此当新的TitleWindow消失时会收集垃圾。
我认为我会在你的位置上做的是将图表抽象为自己的控制,这样你就不必重复代码,在常规窗口和弹出窗口中使用相同的控件,并将数据传递给在createPopUp调用之后。
答案 1 :(得分:0)
当您执行addChild
时,该对象被重新分配,正如Simon所说,DisplayObject
不能属于两个父对象。如果在打开弹出窗口的同时没有看到两个图表不是问题,则可以在打开弹出窗口之前保存子父级和索引,并在关闭弹出窗口时恢复子级状态。
myChartParent=myChart.parent;
myChartIndex=myChartParent.getChildIndex(myChart);
关闭时
myChartParent.addChildAt(myChartIndex);
但是如果你想看两个图表,你将不得不创建两个图表实例。