2009-12-21 13 views
0

Dans mon application, j'ai un graphique que je veux afficher dans une TitleWindow lorsque je clique dessus.Flex TitleWindow.addChild supprime l'objet d'origine

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

Il ne place en effet le tableau dans le TitleWindow qui apparaît, mais il supprime le graphique d'origine du parent. Ensuite, lorsque la fenêtre de titre est fermée, mon graphique est simplement parti. Je n'arrive pas à comprendre comment cloner le tableau - toutes les méthodes que j'ai essayées ont échoué - et je ne sais pas pourquoi cela se produit.

Solution:

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); 
} 

Répondre

0

Lorsque vous effectuez un addChild l'objet est réparé, comme dit Simon un DisplayObject ne peut pas appartenir à deux parents. Si vous ne voyez pas deux graphiques en même temps lorsque vous ouvrez votre popup, vous pouvez avant d'ouvrir le menu contextuel enregistrer le parent et l'index enfant, et lorsque vous fermez le menu contextuel, restaurez l'état enfant.

avant l'ouverture

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

lors de la fermeture

myChartParent.addChildAt(myChartIndex); 

Mais si vous voulez voir deux tableau vous devrez créer deux instances de graphique.

+0

Heh, je suis venu ici pour poster cette solution exacte. – FlexMan

0

Je n'ai pas réussi à trouver de la documentation pour le soutenir, mais je crois que Flash UI Le composant ne peut avoir qu'un seul parent. Lorsque vous appelez addChild(), je suspecte que la parenté du contrôle change et disparaît de l'autre fenêtre. Puisque le parentage a changé, il récupérera les ordures lorsque la nouvelle TitleWindow disparaîtra. Ce que je pense que je ferais dans votre position serait de faire abstraction du graphique à son propre contrôle afin que vous n'avez pas à dupliquer le code, utilisez le même contrôle dans votre fenêtre régulière et votre popup, et transmettre les données après l'appel createPopUp.

+0

Le graphique est généré et intégré dans un composant personnalisé. Les données sont traitées dans ce composant et la seule façon dont je peux utiliser les données est de retirer le graphique du composant après sa génération. – FlexMan

+0

C'est malheureux, on dirait que vous avez un problème architectural plus profond qui est quelque peu en contradiction avec le fonctionnement de Flex/Flash. @ La réponse de Patrick peut fonctionner, mais je pense que vous pourriez bien faire une séparation plus nette entre les données et la présentation. – Simon