2009-11-06 2 views
1

У меня есть класс, который делает запрос url и сохраняет данные с этого запроса. Когда данные извлекаются, анализируются и сохраняются в массиве, я отправляю событие отправки, которое я слушаю в своем классе документа. В функции обработчика события в классе документа я получаю доступ к массиву, который был скомпилирован из класса. Массив внутри класса имеет 15 значений, однако в моей функции обработчика событий я получаю только одно значение из него, которое является последним значением в массиве. Я разместил свой код ниже. Есть ли другой способ, которым я должен использовать dispatchEvent, чтобы получить все значения массива вместо одного?AS3 Dispatch Event от класса

Спасибо!

Класс

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

Класс документа

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

ответ

3

, как вы регулируете это выглядит нормально. У меня такое ощущение, что длина вашего массива имен равна 1. Поместите трассировку в файл, если это проблема.

for (var key:Object in names) 
{ 
    trace("counter",counter); 
    payload[counter] = [names[key].id, names[key].email]; 
    counter++; 
} 
Смежные вопросы