2009-05-16 6 views
1

Je suis un développeur C# qui essaie d'apprendre quelques AS3, donc ça va être une question assez récente. Je suis confus en ce qui concerne la portée et le GC, car j'ai une classe étendue MovieClip (Diapositive) que je crée des instances de dans une boucle et push() dans un tableau, mais par la suite les éléments sont nuls quand je les retire de la collection.La classe AS3 personnalisée est nulle après avoir été ajoutée à Array

var ldr:URLLoader = new URLLoader(); 
ldr.load(new URLRequest("presentation.xml")); 
ldr.addEventListener(
    Event.COMPLETE, 
    function(e:Event):void { 
     config = new XML(e.target.data); 
     for (var i:Number = 0; i < config.slides.slide.length(); i++) 
     { 
      var node = config.slides.slide[i]; 
      var slide:Slide = new Slide();      
      slides.push(slide); 

      addChild(slide); // Works fine 
     } 
    } 
); 

slides.forEach(function(e:*, index:int, array:Array):void 
    { 
     addChild(e); // Causes "Parameter child must be non-null" exception 
    } 
); 

Je voudrais pouvoir les références diapositives plus tard, afin de les activer au besoin - comment puis-je conserver la référence à mes nouveaux objets?

Mise à jour: Il semble qu'il y ait eu deux problèmes avec ceci. L'appel forEach était en cours avant l'appel de l'événement complet de l'URLLoader, et forEach ne semble pas fonctionner comme prévu. Voici le code de travail final:

var ldr:URLLoader = new URLLoader(); 
ldr.load(new URLRequest("presentation.xml")); 
ldr.addEventListener(
    Event.COMPLETE, 
    function(e:Event):void { 
     config = new XML(e.target.data); 
     for (var i:Number = 0; i < config.slides.slide.length(); i++) 
     { 
      var node = config.slides.slide[i]; 
      var slide:Slide = new Slide();      
      slides.push(slide); 
     } 
     for each (var sl in slides) 
     { 
      addChild(sl); 
     } 
    } 
); 

Répondre

1

Essayez ceci. Voyons voir s'il trace vos diapositives. Je suis en train de coder ici, donc je ne peux pas vous assurer que ça va fonctionner. De plus, je n'ai pas le reste du code, vous devrez donc le tester vous-même.

+0

Mettez un "var" avant la "diapositive dans les diapositives" et je vais vous marquer comme la réponse! – tags2k

+0

Terminé. Désolé, c'est ce qui arrive quand vous essayez d'improviser le codage! : P – ozke

3

Votre appel slides.forEach est en cours d'exécution avant l'événement est tiré de sorte que le tableau de diapositives n'a pas de valeur.

+0

Doh, bien sûr que oui! Je dois arrêter de penser à C# et commencer à penser à jQuery ... – tags2k

+0

Ah, mais pourquoi est-ce que je reçois des objets Nuls? Sûrement si le tableau est vide, il ne devrait rien me passer? – tags2k

+0

J'ai maintenant essayé de déplacer le forEach dans le rappel d'événement et cela ne fonctionne toujours pas :( – tags2k

Questions connexes