Flash AS3 - отправка события из класса - PullRequest
0 голосов
/ 08 марта 2012

Я много читал об отправке событий и до сих пор не могу заставить его работать. У меня есть класс, и я хочу, чтобы его события были видны другим классам, использующим этот. Основной класс:

import special.proxy.ProxyStream;
public class testproxy extends Sprite
{
    var textspace:TextField=new TextField();
    var proxydata:*;

    public function testproxy()
    {
        textspace.autoSize="left";
        textspace.text="ready";
        addChild(textspace);
        try
        {
        proxydata=new ProxyStream();
        addChild(proxydata);
        proxydata.load(proxyurl_string, fileurl_string);
        proxydata.addEventListener("COMPLETE", complete);
        proxydata.addEventListener(Event.COMPLETE, complete);
        }
        catch(e:*){textspace.text=String(e);}
        setTimeout(checkProgress, 2000);            
    }

    function checkProgress(){textspace.text=proxydata.progressstate;}

    function complete(){textspace.text="loaded";}
}

Класс, который отправляет событие для основного класса:

import flash.events.*;
public class ProxyStream extends Sprite {

    public var progressstate:String="0";
    //[Event(name="complete", type="flash.events.Event")]
    [Event(name="complete",  type="flash.events.Event.COMPLETE")] 

    private function complete(e:Event):void {
        progressstate="1";
        dispatchEvent(e);
        dispatchEvent(new Event("COMPLETE", true, true));
        //dispatchEvent(new Event(Event.COMPLETE, true, true));
        //dispatchEvent(new DataEvent("COMPLETE", false, false, e.target.data));
    }
}

Как мы видим, данные прокси добавляются в список отображения. И да, функция завершает работу, потому что, когда я проверяю состояние выполнения через 2 секунды, оно имеет значение 1. Я пробовал много разных способов отправки события. Я до сих пор не могу получить это событие класса в моем основном классе. Я также хочу иметь возможность отправлять данные с этим событием, если это возможно, без создания дополнительного собственного класса событий. Спасибо за любую помощь.

Ответы [ 3 ]

0 голосов
/ 08 марта 2012

Если бы я был на вашем месте, я бы начал использовать каркас сопряжения для Flex.

В двух словах, это глобальная шина событий для вашего проекта.

0 голосов
/ 08 марта 2012

В вашем ProxyStream просто выполните dispatchEvent(e), который снова отправит полное событие из вашего ProxyStream объекта.

В вашем testproxy сделайте следующее:

addEventListener(Event.COMPLETE, completeHandler);

И:

private function completeHandler(event:Event):void
{
    textspace.text = "loaded"
}

Основная проблема здесь, я думаю, заключается в том, что ваша функция-обработчик не принимает никаких аргументов, что является ошибкой во время выполнения.Следует принять один аргумент.

0 голосов
/ 08 марта 2012

Ваш полный список событий не имеет правильных параметров.Это должно быть complete(event:Event):void, а не complete()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...