来自班级的AS3调度事件

时间:2009-11-06 01:43:45

标签: flash actionscript-3 dispatchevent

我有一个类,它创建一个url请求并存储来自该请求的数据。当数据被检索,解析并存储到数组中时,我正在发送一个我在文档类中监听的调度事件。在文档类的事件处理函数中,我正在访问从类中编译的数组。类中的数组有15个值,但在我的事件处理函数中,我只从中检索一个值,这是数组中的最后一个值。我在下面发布了我的代码。是否有一种不同的方式我应该使用dispatchEvent来检索所有数组值而不是一个?

谢谢!

班级

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

1 个答案:

答案 0 :(得分:3)

你处理它的方式看起来很好。我有一种感觉,你的名字数组的长度只有1.把一条痕迹放在一个看看是否就是这个问题。

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