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

时间:2011-07-19 09:20:04

标签: actionscript-3 events

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

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

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

这是自定义事件类:CSDragger类触发一个ITEM_DATA事件,该事件到达B.swf的文档类(但不是A.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); 
        } 
    } 
}

1 个答案:

答案 0 :(得分:0)

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

您可能遇到ApplicationDomain问题,因此请尝试使用A.swf中的上下文加载B.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);