我试图从我遇到的一个例子中得到一些代码。大多数功能都有效,但在尝试调度自定义事件时失败。目前,尝试调度事件的代码位于处理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
答案 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课程的更多信息。