2009-11-06 5 views
1

J'ai une classe qui effectue une requête d'url et stocke des données de cette requête. Lorsque les données sont récupérées, analysées et stockées dans un tableau, j'envoie un événement dispatch que j'écoute dans ma classe de document. Dans la fonction de gestionnaire d'événements de la classe de document, j'accède au tableau qui a été compilé à partir de la classe. Le tableau à l'intérieur de la classe a 15 valeurs, mais dans ma fonction de gestionnaire d'événements, je ne récupère qu'une seule valeur, qui est la dernière valeur dans le tableau. J'ai posté mon code ci-dessous. Existe-t-il une manière différente que je suis supposé utiliser le dispatchEvent afin de récupérer toutes les valeurs de tableau au lieu d'une?AS3 Dispatch Event from Class

Merci!

Classe

package com.src 

{ 
import flash.display.Sprite; 
import flash.net.URLRequest; 
import flash.net.URLLoader; 
import flash.events.*; 
import com.src.serialization.json.JSON; 

public class DataGrab extends Sprite 
{ 
    public var payload:Array; 

    public function DataGrab() 
    { 
    } 

    public function init(resource:String):void 
    { 
    var loader:URLLoader = new URLLoader(); 
    var request:URLRequest = new URLRequest(resource); 
    loader.addEventListener(Event.COMPLETE, onComplete); 
    loader.load(request); 
    } 

    private function onComplete(e:Event):void 
    { 
    var loader:URLLoader = URLLoader(e.target); 
    var jsonData:Object = JSON.decode(loader.data); 

    var people = jsonData.people; 
    var names:Array = people.name; 
    var counter:Number = 0; 
    payload = new Array(); 
    for (var key:Object in names) 
    { 
    payload[counter] = [names[key].id, names[key].email]; 
    counter++; 
    } 
    dispatchEvent(new Event(Event.COMPLETE)); 
    } 

    public function getResults():Array 
    { 
    //payload has 15 values 
    return payload; 
    } 
} 
} 

Document de classe

public function queryServer(url:String):void 
    { 
     grabData = new DataGrab(); 
     grabData.addEventListener(Event.COMPLETE, dataReadyHandler); 
     resultData = new Array(); 
     grabData.init(url); 

    } 

    public function dataReadyHandler(e:Event):void 
    { 
     grabData = e.target as DataGrab; 
     resultData = grabData.getResults(); 

      //only has 1 value, the last value in the payload array 
     trace(resultData); 
    } 

Répondre

3

la façon dont vous traitez il semble bien. J'ai le sentiment que la longueur de votre tableau de noms est seulement 1. Mettez une trace dans un voir si c'est le problème.

for (var key:Object in names) 
{ 
    trace("counter",counter); 
    payload[counter] = [names[key].id, names[key].email]; 
    counter++; 
}