Je me demande si quelqu'un peut regarder ce code et me dire pourquoi l'appel de removeSelectedChild fonctionne lorsqu'il est appelé depuis le même document, mais renvoie l'erreur suivante lorsqu'il est appelé depuis le document enfant /composant. "ArgumentError: Erreur # 2025: le DisplayObject fourni doit être un enfant de l'appelant."Flex: La méthode ne fonctionne pas lors de l'appel parentDocument
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" >
<mx:Accordion id="myAccordion"
width="100%" height="100%"
selectedIndex="0">
<mx:Script>
<![CDATA[
public function removeSelectedChild():void {
trace("before");
try {
myAccordion.selectedChild.parent.removeChild(myAccordion.selectedChild)
} catch(err:ReferenceError) {
trace("catch")
}
trace("after");
}
]]>
</mx:Script>
<mx:headerRenderer>
<mx:Component>
<mx:Button click="{ parentDocument.removeSelectedChild() }" />
</mx:Component>
</mx:headerRenderer>
<mx:HBox>
<mx:Button click="{ removeSelectedChild() }" />
</mx:HBox>
</mx:Accordion>
</mx:Application>
En cliquant sur le bouton dans l'enfant produit le résultat attendu, tout en cliquant sur l'en-tête enlève l'enfant comme prévu, mais jette aussi une erreur malgré le fait qu'ils appellent tous deux exactement la même méthode.
Désolé que l'exemple est un peu artificiel, ce problème est survenu dans une vue assez compliquée, qui utilisait toutes sortes de composants personnalisés. C'était la seule façon de l'afficher de manière à ce que vous puissiez compiler rapidement et facilement sur le vrai problème sans bruit de fond.
Je tire mes cheveux sur celui-ci et j'apprécierais vraiment si quelqu'un pouvait aider. MISE À JOUR: J'ai maintenant découvert que l'exception est déclenchée après l'exécution de la méthode. Voir les instructions de trace ci-dessus. "after" est tracé avant que l'exception ne soit lancée.
Cheers,
Chris
Non cela ne fonctionne pas non plus. On dirait que ça doit être un bug Flex. – ChrisInCambo
Oui, il semble très étrange que vous ne puissiez pas faire 'child.parent.removeChild (child)'. – Theo