AS3从事件侦听器函数返回变量 [英] AS3 Returning a variable from an event listener function

查看:123
本文介绍了AS3从事件侦听器函数返回变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图将XML从事件完成返回到主函数,但无法弄清楚该怎么做.

I'm trying to return XML from an event complete back to the main function, but can't figure out how to do it.

这是我正在调用的函数:

Here's the functions I'm calling:

主文件:

public var mySendAndLoad:SendAndLoad = new SendAndLoad(); 

mySendAndLoad.sendData(url,variables)

mySendAndLoad类:

The mySendAndLoad class:

package 
{

    import flash.events.*;
    import flash.net.*;
    import flash.xml.XMLDocument;

    public class SendAndLoad
    {
        public var xml:XML = new XML();
        public var xmlList:XMLList;

        public function SendAndLoad()
        {
        }
        public function sendData(url:String, _vars:URLVariables):String
        {
            var request:URLRequest = new URLRequest(url);
            var loader:URLLoader = new URLLoader();
            loader.dataFormat = URLLoaderDataFormat.TEXT;
            request.data = _vars;
            request.method = URLRequestMethod.POST;
            loader.addEventListener(Event.COMPLETE, handleComplete);
            loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
            loader.load(request);
        }
        private function handleComplete(event:Event):String
        {
            var loader:URLLoader = URLLoader(event.target);
            xml = XML(loader.data);
            xmlList = xml.children();
            return(xmlList[1]);
        }
        private function onIOError(event:IOErrorEvent):void
        {
            trace("Error loading URL.");
        }
    }
}

我想要发生的是让xmlList返回主文件.但是由于不是在我打电话给(sendData)的情况下,它不会被带回来.

What I want to happen is have the xmlList come back to the main file. But since it isn't in the event I called (sendData) it doesn't get brought back.

有什么想法吗?

推荐答案

package 
{

import flash.events.*;
import flash.net.*;
import flash.xml.XMLDocument;

//THIS CLASS EXTENDS EVENTDISPATCHER SO IT CAN DISPATCH EVENTS
public class SendAndLoad extends EventDispatcher
{
    public var xml:XML = new XML();
    public var xmlList:XMLList;

    public function SendAndLoad()
    {
        super(null);
    }
    public function sendData(url:String, _vars:URLVariables):void
    {
        var request:URLRequest = new URLRequest(url);
        var loader:URLLoader = new URLLoader();
        loader.dataFormat = URLLoaderDataFormat.TEXT;
        request.data = _vars;
        request.method = URLRequestMethod.POST;
        loader.addEventListener(Event.COMPLETE, handleComplete);
        loader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
        loader.load(request);
    }
    private function handleComplete(event:Event):void
    {
        var loader:URLLoader = URLLoader(event.target);
        xml = XML(loader.data);
        xmlList = xml.children();


        //NEW CODE
        var evt:Event=new Event(Event.COMPLETE);
        dispatchEvent(evt);
        //return(xmlList[1]);
    }
    private function onIOError(event:IOErrorEvent):void
    {
        trace("Error loading URL.");
    }
}

}

并在主文件中

public var mySendAndLoad:SendAndLoad = new SendAndLoad(); 
mySendAndLoad.addEventListener(Event.COMPLETE, xmlLoadCompleted);
mySendAndLoad.sendData(url,variables)

private function xmlLoadCompleted(e:Event):void {
    var childToUse:XML=mySendAndLoad.xmlList[1];
    //whatever else you want to do 
}

这篇关于AS3从事件侦听器函数返回变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆