2012-02-15 71 views
4

我試圖從一個自定義的調度自定義事件的ItemRenderer的ItemRenderer調度自定義事件

這是我的自定義事件

package events 
{ 
    import customClass.Product; 

    import flash.events.Event; 

    public class CopyProductEvent extends Event 
    { 
     public static const COPY_PRODUCT:String = "COPY_PRODUCT"; 
     public var picked:Prodotti; 

     public function CopyProductEvent(type:String, picked:Product) 
     { 
      super(type); 
      this.picked = picked; 
     } 
    } 
} 

的itemRenderer我有做一個函數:

 private function sendEvent(o:Product):void 
     { 
      dispatchEvent(new CopyProductEvent(CopyProductEvent.COPY_PRODUCT,o)); 
     } 

而在主應用程序中,我有一個sp方舟列表,我嘗試添加一個事件監聽既應用和列表本身,但他們從來沒有被稱爲...

this.addEventListener(CopyProductEvent.COPY_PRODUCT, 
     function(e:Product):void{ 
      ... 
    }); 

    list.addEventListener(CopyProductEvent.COPY_PRODUCT, 
     function(e:Product):void{ 
      ... 
    }); 

爲什麼?!?我在哪裏做錯了?

從該函數的事件被正確調度......我無法攔截它..

回答

9

聽起來像是你的事件不冒泡。

在您的自定義事件的構造函數添加bubbles參數(默認情況下,爲false):

public function CopyProductEvent(type:String, picked:Product, bubbles:Boolean = true) 
     { 
      super(type,bubbles); 
      this.picked = picked; 
     } 

事件在AS3冒泡一個很好的解釋可以在這裏找到: Event Bubbling in AS3

+0

謝謝你,工作......與此同時,我正在等待你的解決方案,我發現另一個(不太精煉),從itemrenderer,當我把它從所有者派出它的事件,所以:'owner.dispatchEvent ...',它的工作太.. ..,順便說一句你的解決方案更好... – Marcx 2012-02-15 13:08:48

+0

是的,該解決方案也可以。然而,它的缺點是你的itemRenderer然後與它的所有者緊密耦合,所以如果你想重新使用渲染器,你將不得不依賴於相同的組件結構。允許事件冒泡允許輕鬆重用。 – James 2012-02-15 14:49:37

+0

是的我知道了......我不知道泡沫的東西:) – Marcx 2012-02-15 14:59:33