【问题标题】:AS3 dispatchEvent not workingAS3 dispatchEvent 不工作
【发布时间】:2014-07-09 16:44:42
【问题描述】:

我搜索了其他调度事件的示例,但没有一个对我有帮助。

这是我目前所拥有的。我知道事件侦听器已成功添加,但从未调度过该事件。

在 .mxml 文件中:

function foo():void {

    var eventClassObj:MyEventClass = new MyEventClass();


}

在单独的 .as 文件中:

public class MyEventClass extends EventDispatcher 
{

    public function MyEventClass(target:flash.events.IEventDispatcher = null) 
    {

                    //ADD EVENT LISTENER
        this.addEventListener("test", testFunc, true);



                    //DEBUGGING PRINT STATEMENTS
        var str:String;
        if (this.hasEventListener("test")) {
                str = "EVENT LISTENER ADDED";
        } else {
                str = "NO LISTENER";
        }

        ExternalInterface.call("console.log", str);

                    //DISPATCH EVENT
        this.dispatchEvent(new Event("test", true));
    }


    //THIS MUST EXECUTE WHEN EVENT DISPATCHED
    private function testFunc(e:Event):void {
        ExternalInterface.call("console.log", "dispatch event successful");
    }
}

我对 ActionScript3 完全陌生。你知道为什么这个事件永远不会被派发吗?我在控制台中运行它的输出只是:

EVENT LISTENER ADDED

而我的预期输出是:

EVENT LISTENER ADDED
dispatch event successful

我不明白为什么这不起作用。

【问题讨论】:

  • 已经有一段时间了,但我猜你的事件监听器没有被触发 b/c 调度事件的东西不在 Flash 显示列表中。根据定义,MXML 对象是事件分派器。因此,您不需要单独的EventDispatcher——您甚至可以直接从 MXML 类中侦听和分派您的“测试”。如果你真的想让另一个班级监听这个事件,你需要将它添加到显示列表中(将其设为UIComponent 或特别注意你可以使用Sprite)。

标签: actionscript-3 apache-flex event-handling dispatchevent event-listener


【解决方案1】:

问题源于您添加事件侦听器的方式。您将useCapture 设置为true,这样的设置会阻止监听器对冒泡事件做出反应。

如果您更改以下行:

this.addEventListener("test", testFunc, true);

到:

this.addEventListener("test", testFunc);

事件将由您的testFunc 处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多