2009-11-06 7 views
1

URL 요청을하고 해당 요청의 데이터를 저장하는 클래스가 있습니다. 데이터가 검색되어 배열로 저장 될 때, 나는 내 문서 클래스에서 수신 대기하는 발송 이벤트를 보내고있다. 문서 클래스의 이벤트 처리기 함수에서 클래스에서 컴파일 된 배열에 액세스하고 있습니다. 클래스 내부의 배열에는 15 개의 값이 있지만 내 이벤트 핸들러 함수에서는 배열의 마지막 값인 하나의 값만 검색합니다. 아래 코드를 게시했습니다. 배열 값을 모두 검색하는 대신 dispatchEvent를 사용해야하는 다른 방법이 있습니까?AS3 Dispatch Event from Class

감사합니다.

는 클래스

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