Apache flex Itemrenderer分派自定义事件

Apache flex Itemrenderer分派自定义事件,apache-flex,actionscript,event-handling,dispatchevent,Apache Flex,Actionscript,Event Handling,Dispatchevent,我正在尝试从自定义ItemRenderer发送自定义事件 这是我的定制活动 package events { import customClass.Product; import flash.events.Event; public class CopyProductEvent extends Event { public static const COPY_PRODUCT:String = "COPY_PRODUCT"; pu

我正在尝试从自定义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;
        }
    }
}
项目渲染器中我有一个函数,可以执行以下操作:

        private function sendEvent(o:Product):void
        {
            dispatchEvent(new CopyProductEvent(CopyProductEvent.COPY_PRODUCT,o));
        }
在主应用程序中,我有一个火花列表,我试图向应用程序和列表本身添加一个EventListener,但它们从未被调用

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

    list.addEventListener(CopyProductEvent.COPY_PRODUCT,
        function(e:Product):void{
            ...
    });
为什么?!?我哪里做错了


函数中的事件已正确调度。。。我无法拦截它。

听起来你的活动没有冒泡

在自定义事件构造函数中添加
气泡
参数(默认情况下为
false
):

public function CopyProductEvent(type:String, picked:Product, bubbles:Boolean = true)
        {
            super(type,bubbles);
            this.picked = picked;
        }
关于AS3中的事件冒泡,可以在下面找到一个很好的解释:

谢谢你的努力。。。与此同时,我在等待你的解决方案,我从itemrenderer中找到了另一个(不太精细),当我分派事件时,我从owner中分派了它,所以:
owner.dispatchEvent…
,而且它也工作了…,顺便说一句,你的解决方案更好…是的,该解决方案也会工作。但是,它的缺点是itemRenderer与它的所有者紧密耦合,因此,如果您想要重用渲染器,则必须依赖相同的组件结构。允许事件冒泡允许轻松重用。是的,我知道了。。。我不知道泡沫的事:)@Marcx我注意到你说的是我的解决方案。你知道,我在回答中确实提到了泡泡。此外,我不知道为什么该解决方案会将ItemRenderer与其所有者紧密地耦合在一起。您只需通过IEventDispatcher接口发送事件。您可以随时在另一个列表中重用itemrenderer。无论如何,您不应该在某种列表组件之外使用ItemRenderer。他们已经设计好了,而且泡泡也很昂贵。如果您的ItemRenderer出于某种原因会发送很多事件,那么最好不要选择冒泡方法(我必须承认这是一种极端情况)。另一个例子是:如果您想从ItemRenderer分派一个通用的“itemClick”事件,那么您不想到处分派这种事件。您希望将其约束到父列表组件。在问题中描述的情况下,冒泡是一种方法。