Dispatchevent没有开火

时间:2015-05-07 15:38:10

标签: actionscript-3 flash flash-cc

我有一个fla文件和2个类文件。在我的脸上我有:

addEventListener(SubtitleLoadEvent.PASS_PARAMS, onProcessedEvent);

function onProcessedEvent(e:Event):void {
    trace(e.currentTarget);
}

SubtitleLoadEvent.as:

package
{
    import flash.events.Event;

    public class SubtitleLoadEvent extends Event
    {
        public static const PASS_PARAMS:String = new String("passparams");
        public var resultArr:Array = new Array();

        public function SubtitleLoadEvent(type:String, arr:*, bubbles:Boolean = false,
                                                cancelable:Boolean = false):void
        {
            this.resultArr = arr;
            super(type, bubbles, cancelable);
        }

        override public function clone():Event
        {
            return(new SubtitleLoadEvent(type, resultArr, bubbles, cancelable));
        }
    }
}

我有一个扩展精灵的类文件:

dispatchEvent(new SubtitleLoadEvent(SubtitleLoadEvent.PASS_PARAMS, cleanArr));

但电影没有输出任何东西。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

由于您的活动没有冒泡,因此您的时间线代码听到该事件的唯一方法是在相同的范围内调度(这种情况不太可能如此)。

如果您的调度精灵位于同一范围(时间轴)或它的后代/子节点上,那么使事件气泡(创建事件时的第三个参数)应该可以使它工作。 (或者你可以听捕捉阶段)

否则,您需要在两个对象的某个公共父级上侦听事件。

解决此问题的最简单方法是发送和收听stage

stage.addEventListener(SubtitleLoadEvent.PASS_PARAMS, onProcessedEvent);
stage.dispatchEvent(new SubtitleLoadEvent(SubtitleLoadEvent.PASS_PARAMS, cleanArr));

这假定您的调度精灵已添加到显示列表中。如果不是,则stage属性将为null。如果它不在显示列表中,那么它将无效。

要了解有关活动如何运作及其生命周期的更多信息,您可以read this article