Flex TitleWindow.addChild rimuove oggetto originale
-
20-09-2019 - |
Domanda
Nella mia domanda, ho una tabella che voglio visualizzare in una TitleWindow quando si fa clic su.
var win:TitleWindow = PopUpManager.createPopUp(this, TitleWindow, false) as TitleWindow;
win.addChild(myChart);
PopUpManager.bringToFront(win);
E 'in effetti posizionare il grafico nel titlewindow che si presenta, ma rimuove il grafico originale dal genitore. Poi, quando il titlewindow è chiuso, mia tabella è andato semplicemente. Io non riesco a capire come clonare il grafico - tutti i metodi che ho provato non è riuscita -. E non ho idea del perché questo sta accadendo
Soluzione:
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);
}
Soluzione
Quando si esegue un addChild
l'oggetto viene reparented, come ha detto Simon uno DisplayObject
non può appartenere a due genitori. Se è non è un problema di non vedere due grafico nello stesso momento in cui si apre il popup, è possibile prima di aprire il popup Salva il genitore del bambino e l'indice, e quando si chiude il popup di ripristinare lo stato del bambino.
prima di aprire
myChartParent=myChart.parent;
myChartIndex=myChartParent.getChildIndex(myChart);
in fase di chiusura
myChartParent.addChildAt(myChartIndex);
Ma se volete vedere due grafico che si dovrà creare due esempio di grafico.
Altri suggerimenti
Non sono riuscito a trovare la documentazione per sostenerlo, ma credo che un componente Flash UI può avere un solo genitore. Quando si chiama addChild () Ho il sospetto che la parentela dei cambiamenti di controllo e scompare dalla finestra. Dal momento che la parentela è cambiato otterrà garbage collection quando la nuova TitleWindow scompare.
Quello che penso avrei fatto nella tua posizione sarebbe quello di astrarre il grafico verso il proprio controllo in modo da non dover duplicare il codice, utilizzare lo stesso controllo nella finestra regolare e il vostro popup, e passare i dati al dopo la chiamata createPopup.