我有两个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);