Flex TitleWindow.addChild удаляет оригинальный объект - PullRequest
0 голосов
/ 21 декабря 2009

В моем приложении есть диаграмма, которую я хочу отобразить в 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 голосов
/ 21 декабря 2009

Когда вы делаете addChild, объект перерисовывается, как сказал Саймон, один DisplayObject не может принадлежать двум родителям. Если при открытии всплывающего окна не возникает проблем с одновременным отображением двух диаграмм одновременно, перед открытием всплывающего окна можно сохранить дочерний родительский элемент и индекс, а после закрытия всплывающего окна восстановить дочернее состояние.

до открытия

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

при закрытии

myChartParent.addChildAt(myChartIndex);

Но если вы хотите увидеть два графика, вам придется создать два экземпляра графика.

0 голосов
/ 21 декабря 2009

Мне не удалось найти документацию для его поддержки, но я считаю, что компонент Flash UI может иметь только одного родителя. Когда вы вызываете addChild (), я подозреваю, что происхождение элемента управления меняется, и он исчезает из другого окна. Поскольку происхождение изменилось, оно будет собирать мусор при исчезновении нового окна TitleWindow.

Я думаю, что на вашем месте я бы сделал абстрагирование диаграммы под свой собственный элемент управления, чтобы вам не приходилось дублировать код, использовать один и тот же элемент управления в обычном окне и всплывающем окне и передавать данные в это после вызова createPopUp.

...