【问题标题】:Unable to dispatch custom event in flex mobile application无法在 flex 移动应用程序中调度自定义事件
【发布时间】:2011-11-10 14:49:08
【问题描述】:

我正在尝试从我遇到的示例中获取一些代码。大多数功能都有效,但在尝试分派自定义事件时失败。目前,尝试调度事件的代码位于处理 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 和这种类型的开发,所以我很可能会做一些非常愚蠢的事情。任何帮助将不胜感激。

谢谢

JaChNo

【问题讨论】:

    标签: apache-flex flex-mobile


    【解决方案1】:

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

    可以在任何扩展或具有 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")); 
    

    这种方法是 deprecated 自 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 Application类的信息。

    【讨论】:

    • 嗨,首先你是对的,我对事件调度感到困惑!我尝试了您显示的 dispatchEvent 方法,但如果我尝试从扩展 eventdispatcher 运行它的类,它会出现“调用可能未定义的方法 dispatchEvent”的错误?
    • 如果你想从一个类中调度一个事件;是的,它需要扩展 EventDispatcher 类;或实现 IEventDpatcher。您可能会受益于阅读以下内容:help.adobe.com/en_US/flex/using/…
    • 现在所有的工作都只是用 EventDispatcher 扩展它。感谢事件链接。
    猜你喜欢
    • 2013-11-12
    • 1970-01-01
    • 2019-01-15
    • 2012-03-20
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-22
    • 2023-03-18
    相关资源
    最近更新 更多