【问题标题】:Propagate custom event to parent swf from element inside child swf将自定义事件从子 swf 内的元素传播到父 swf
【发布时间】:2011-07-19 09:20:04
【问题描述】:

我有两个 swf 文件,A.swf 和 B.swf,每个文件都有其 Document Class: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); 
        } 
    } 
}

【问题讨论】:

  • 大概是自定义事件冒泡设置为真?如果是这样,您是否在 B.swf 中的任何地方捕获它并致电stopPropagation()
  • 另外,您能否发布用于将 B 加载到 A 中的代码?
  • 哦,我不调用 stopPropagation();

标签: actionscript-3 events


【解决方案1】:

我将假设在调度事件的对象和 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);

【讨论】:

  • 我收到两个错误:访问未定义的 currentDomain 属性和 addChild 参数数量错误。
  • (似乎通过帮助你编辑了我的问题,我损失了大约 15 分):-)
  • 对不起,我的错,想赶时间!我会编辑...(让我尝试帮助这些代表点)
  • 不,它不起作用:和以前一样,它到达 B.swf main,但永远不会到达 A.swf。
  • Shane,也许我发现:我假装在 A.swf 和 B.swf 中听事件,但也许我只能在一个地方听。我不知道这是否属实,但如果我在 B.swf 中注释 addEventListener,则事件会在 A.swf 中触发。
猜你喜欢
  • 2010-11-26
  • 2023-03-04
  • 2011-06-04
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多