0

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

该示例中有这一行用于调度:

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

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

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

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

但我得到这个错误:

TypeError:错误 #1034:类型强制失败:无法将 events::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;
    }

}
}

我在黑暗中笨手笨脚,因为我刚接触 flex 和这种类型的开发,所以我很可能会做一些非常愚蠢的事情。任何帮助将不胜感激。

谢谢

雅克诺

4

1 回答 1

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 起已被弃用;而您使用FlexGlobals.topLevelApplication代替:

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

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

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

import spark.components.Application 

有关Spark 应用程序类的更多信息。

于 2011-11-10T15:30:04.780 回答