Flex TitleWindow.addChild 원래 객체를 제거합니다
-
20-09-2019 - |
문제
내 응용 프로그램에는 클릭 할 때 제목 감에 표시하고 싶은 차트가 있습니다.
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 호출.