Flex TitleWindow.addChild删除原始对象

时间:2009-12-21 07:38:21

标签: flex charts addchild bar-chart

在我的应用程序中,我有一个图表,我希望在点击时显示在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);
}

2 个答案:

答案 0 :(得分:0)

我还没有设法找到支持它的文档,但我相信Flash UI组件只能有一个父组件。当你调用addChild()时,我怀疑控件的parentage会改变,它会从另一个窗口中消失。由于父母已经更改,因此当新的TitleWindow消失时会收集垃圾。

我认为我会在你的位置上做的是将图表抽象为自己的控制,这样你就不必重复代码,在常规窗口和弹出窗口中使用相同的控件,并将数据传递给在createPopUp调用之后。

答案 1 :(得分:0)

当您执行addChild时,该对象被重新分配,正如Simon所说,DisplayObject不能属于两个父对象。如果在打开弹出窗口的同时没有看到两个图表不是问题,则可以在打开弹出窗口之前保存子父级和索引,并在关闭弹出窗口时恢复子级状态。

打开前

myChartParent=myChart.parent;
myChartIndex=myChartParent.getChildIndex(myChart);

关闭时

myChartParent.addChildAt(myChartIndex);

但是如果你想看两个图表,你将不得不创建两个图表实例。