2012-02-15 68 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