2012-01-29 79 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