문제

내 응용 프로그램에는 클릭 할 때 제목 감에 표시하고 싶은 차트가 있습니다.

        var win:TitleWindow = PopUpManager.createPopUp(this, TitleWindow, false) as TitleWindow;
        win.addChild(myChart);
        PopUpManager.bringToFront(win);

실제로 차트를 제목 위로에 표시하는 차트를 표시하지만 부모의 원래 차트를 제거합니다. 그런 다음 TitleWindow가 닫히면 차트가 사라졌습니다. 차트를 복제하는 방법 (내가 시도한 모든 방법)을 복제하는 방법을 알 수 없으며 왜 이런 일이 일어나고 있는지 전혀 모른다.

해결책:

  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);
}
도움이 되었습니까?

해결책

당신이 할 때 addChild Simon One과 같이 대상은 다시 기소됩니다 DisplayObject 두 부모에게는 속할 수 없습니다. 팝업을 열 때 동시에 두 차트를 보지 않는 것이 문제가되지 않는다면, 팝업을 열기 전에 아동 부모와 색인을 저장하고 팝업을 닫으면 자식 상태를 복원 할 수 있습니다.

열기 전에

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

닫을 때

myChartParent.addChildAt(myChartIndex);

그러나 두 차트를 보려면 두 개의 차트 인스턴스를 만들어야합니다.

다른 팁

나는 그것을 지원하기 위해 문서를 찾지 못했지만 Flash UI 구성 요소는 단일 부모 만 가질 수 있다고 생각합니다. AddChild ()를 호출 할 때 통제의 부모가 변경되고 다른 창에서 사라진 것으로 생각됩니다. 부모가 바뀌었기 때문에 새로운 Titlewindow가 사라지면 쓰레기가 수집됩니다.

내가 당신의 입장에서 할 것이라고 생각하는 것은 차트를 자체 컨트롤로 추출하는 것입니다. 따라서 코드를 복제하고 일반 창과 팝업에서 동일한 컨트롤을 사용하고 다음에 데이터를 전달할 필요가 없습니다. CreatePopup 호출.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top