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