将自定义事件从子swf中的元素传播到父swf



我有两个swf文件,A.swf和B.swf,每个文件都有其文档类:B.swf加载在A.swf的MovieClip中。加载后,B.swf创建CSDragger的一个实例(它是一个库对象,其类扩展了MovieClip),并将该实例的ID属性设置为某个值。当用户将滚动块放置在MovieClip上时,它也会发送一个包含ID值的自定义事件。自定义事件定期达到B.swf,但从未达到A.swf。除了重构CSDragger类(例如在b.s swf文档类中移动其handleDrop方法)之外,是否有任何方法可以使事件到达a.s swf?我知道我可以拦截它并调度另一个事件,但我正在寻找一个不同的解决方案(如果有的话)。

A.swf文档类构造函数的主体中包含以下内容:

var ldr = new Loader(); 
ldr.load(new URLRequest("B.swf")); 
menuLoader_mc.addChild(ldr);

这是自定义事件类:CSDragger类触发ITEM_DATA事件,该事件到达b.s swf的文档类(但不到达a.s swf的文档类)。当然,B.swf和A.swf中都有侦听器。

package events { 
    import flash.events.EventDispatcher; 
    import flash.events.Event; 
    public class ItemEvent extends Event { 
        public static const ITEM_DATA:String = "ItemData"; 
        public var data:*; 
        public function ItemEvent(type:String, data:*) 
        { 
            this.data = data; 
            super(type, true); 
        } 
    } 
}

我将假设在分配事件的对象和b.s swf的根(我看到您编辑,有)之间的显示树上有一条直接的祖先线。

您可能会遇到ApplicationDomain问题,所以尝试使用a.s swf:

中的上下文加载b.s swf:
var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
var ldr = new Loader(); 
ldr.load(new URLRequest("B.swf"),context); 
menuLoader_mc.addChild(ldr);

最新更新