在类中使用事件侦听器

时间:2011-12-15 16:27:58

标签: flash actionscript-3 flex flash-builder

我正在尝试在类中使用eventlistener,但我无法使其正常工作!

该类用于处理HTTPRequest,因此我使用的是ResultEvent.RESULT。任何人都可以帮助我吗?

谢谢!

public class GetXML
{
    public var content:Object;
    public var url:String;
    public var database:HTTPService;

    public function GetXML()
    {
        this.content = content;
        this.url = url;
        this.database = database;
    }

    public function setURL(url:String):void {
        this.url = url;
    }

    public function getContent():void {
        this.database = new HTTPService();
        this.database.url = this.url;
        this.database.addEventListener(ResultEvent.RESULT, foo);
        this.database.send();
    }

    public function foo(event:ResultEvent):void {
        Alert.show("foo");
    }

}

2 个答案:

答案 0 :(得分:0)

 this.database.addEventListener(ResultEvent.RESULT, foo);

我认为这个示例代码是在API完成之前发布的。

根据documentation,HTTPService类调度两个或五个事件(取决于包 - 当然,Adobe正在使用的新文档系统似乎不太完美)。

无论如何,addEventListener()方法将第一个参数作为表示要侦听的事件类型的字符串。在您的代码中,您使用“ResultEvent.RESULT”。根据{{​​3}},ResultEvent类没有这样的常量。 (另外,你没有导入ResultEvent类,但是我使用的是Flash,而不是Flex,所以我不知道ResultEvent类是否是核心)

您可以尝试使用实际字符串作为测试:

 this.database.addEventListener('result', fooResult);
 this.database.addEventListener('fault', fooFault);
 this.database.addEventListener('invoke', fooInvoke);

是的,我也更喜欢使用常量,但让我们先看看它是否有效。 :)

答案 1 :(得分:0)

实际上,根据documentation,ResultEvent类有这样的常量。

对我来说:

    this.database.addEventListener(ResultEvent.RESULT, foo);

正常工作并显示警告框。我试试:

    this.database.addEventListener(Event.ACTIVATE, handleActivate);
    this.database.addEventListener(Event.DEACTIVATE, handleDeactivate);
    this.database.addEventListener(FaultEvent.FAULT, handleFault);
    this.database.addEventListener(InvokeEvent.INVOKE, handleInvoke);
    this.database.addEventListener(ResultEvent.RESULT, handleResult);

并检查每个人的警报或使用Charles / HttpFox检查我们是否有任何请求或回复。