无法在Flex移动应用程序中调度自定义事件

时间:2011-11-10 14:49:08

标签: flex flex-mobile

我试图从我遇到的一个例子中得到一些代码。大多数功能都有效,但在尝试调度自定义事件时失败。目前,尝试调度事件的代码位于处理amf远程处理的类中。

示例中有一行用于发送:

Application.application.dispatchEvent(new  
RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"));

但是失败了,因为它不知道application.application是什么“此行的多个标记: - 未定义属性应用程序的访问“

我认为这是因为这不是为移动应用程序编写的。我尝试将调度程序更改为EventDispatcher

EventDispatcher(
new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE, "worked"));

但是我得到了这个错误:

TypeError:错误#1034:类型强制失败:无法将事件:: RemoteResultEvent @ 18337731转换为flash.events.EventDispatcher。

这是自定义事件RemoteResultEvent.as中的代码:

package events
{

import flash.events.Event;
public class RemoteResultEvent extends Event {

    public static var USER_UPDATE_COMPLETE:String = "UserUpdateComplete";
    public var message:String;

    public function RemoteResultEvent(eventType:String, message:String) {
        super(eventType, false, false);
        this.message = message;
    }

}
}

我在黑暗中笨手笨脚,因为我不熟悉这种类型的开发,所以我很可能会做一些非常愚蠢的事情。我们将非常感激地提供任何帮助。

由于

JaChNo

1 个答案:

答案 0 :(得分:3)

您似乎对事件调度感到困惑。

可以在任何扩展或具有EventDispatcher的Flex类中调度事件。大多数Flex组件,包括Application扩展EventDispatcher。要发送活动,您就是在正确的轨道上:

dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"));

这将从您当前的班级发送事件。并非所有Flex UI组件,包括MXML中的组件都可以被视为一个类。

您要做的是在主要级别的应用程序上发送事件;这是一个可怕的封装漏洞,但可行。您必须将其强制转换为应用程序,这样您才能获得通用对象。像这样:

(Application.application as Application).dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test")); 

自Flex 4以来,此方法为deprecated;而你使用FlexGlobals.topLevelApplication代替:

(FlexGlobals.topLevelapplication as Application).dispatchEvent(new RemoteResultEvent(RemoteResultEvent.USER_UPDATE_COMPLETE,"test"))

你没有说,但你暗示你在移动项目中。如果是这样,除非您明确地将SWC w / MX组件添加到您的类中,否则我不希望mx Application类可用。您必须访问没有Application属性的Spark应用程序。这可能就是你收到错误的原因。

请务必导入您要使用的正确应用程序:

import spark.components.Application 

有关Spark Application课程的更多信息。