2012-01-29 84 views
0

出现气泡类调度事件我有由一个主Flex应用程序加载的小SWF AS3的Flash应用程序。与不上的舞台

主要Flex应用程序中包含的SWFLoader和我加在 SWFLoader.content事件侦听器来获取,我编写自定义事件。

现在每当我在申请喜欢我使用的功能dispatchEvent创建活动,我要确保该事件的气泡参数为true。所以在这种情况下,事件会在舞台上起泡,直到它到达我的事件监听器,并且我可以正确处理事件。

问题所在时,我有一个静态类,我想从那里发出事件。因为它是一个静态类,而不是出现在我的舞台上的显示对象,所以它没有到哪里去冒泡,因此即使在我的主flex应用程序中我也无法获取自定义。

我尝试使用此事件与下面的代码:

  new EventDispatcher().dispatchEvent(new CustomEvent(CustomEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal))); 

我的自定义事件的构造函数获取参数作为第二个参数。

如此看来,当我使用事件调度,事件仍然没有在那里泡,这就是为什么我没有在我的主应用程序接收它。

我该如何解决这个问题?我需要能够正确地派发一个事件在没有出现在舞台上的对象上。

主要需提供本人,为了用它来调度事件在舞台上的这个功能出现的对象。我确实希望有一个更好的解决方案来解决这个问题。

任何信息将不胜感激。

这是我的自定义事件类:

public class CustomEvent extends Event 
{ 
    public var command:String; 
    public var params:Object; 
    public static const CONTROL_TYPE:String = "eMyControl"; 


    private static var EVENT_setAttribute:String = "set_attribute"; 

    private static var gameAttributes:Object = new Object(); 

    public static function setAttribute(attrName:String,attrVal:String):void { 
     gameAttributes[attrName]=attrVal; 

     new EventDispatcher().(new XpoEvent(XpoEvent.EVENT_setAttribute,{'attr_name':attrName,'attr_val':attrVal})); 
    } 

    public function CustomEvent(eventName:String, params:Object = null, bubbles:Boolean = true, cancelable:Boolean = false) 
    { 
     var _loc_6:String = null; 
     var _loc_5:String = ""; 
     if (params != null) 
     { 
      _loc_5 = "params: "; 
      for (_loc_6 in params) 
      { 

       _loc_5 = _loc_5 + (_loc_6 + "=" + params[_loc_6] + " "); 
      } 
     } 
     trace("CustomEvent issued - " + eventName + " " + _loc_5); 
     super(CONTROL_TYPE, bubbles, cancelable); 
     this.command = eventName; 
     if (params != null) 
     { 
      this.params = params; 
     } 
     return; 
    } 

} 

,你可以在这里看到我有通行证attrName和Val到一个数组,然后分派自定义事件的静态函数调用的setAttribute。默认情况下,自定义类事件启用了气泡。 它似乎仍然是因为我没有使用阶段中出现的对象来调度事件,因而不允许主Flex应用程序正确捕获该事件。当你创建一个EventDispatcher实例,并派遣它的东西没有人会得到你的事件,因为没有人可以订阅它

<object In Stage>.dispatchEvent(new CustomEvent("testme")); 

感谢

回答

1

下面的代码做的工作。

你必须从一些东西,是在显示列表分派事件。但是你的静态类并不知道任何有关显示列表的信息,它可以访问它。在初始化期间,您必须在显示列表中提供一个对象。为此,在加载的SWF中,您可以传递someDisplayObject.root,其中someDisplayObject处于舞台上。不是someDisplayObject.stage,因为它会指向容器Stage,更可能无法访问。

+0

谢谢。我添加了一个函数来设置事件将从中冒泡的显示对象。 – ufk 2012-01-30 07:38:29