Flex:如何在ItemRenderer中侦听事件

时间:2012-04-02 19:55:39

标签: flex flex4 flex4.5 flexbuilder

我尝试在ItemRenderer中创建一个EventListener但它不起作用。如何在ItemRenderer中收听事件?

----在MainHomeView.mxml ----

<fx:Metadata>
    [Event(name="myEvent", type="flash.events.Event")]
</fx:Metadata>

protected function btnAdd_clickHandler(event:MouseEvent):void {       
    var eventObject:Event = new Event("myEvent", true, true);
    dispatchEvent(eventObject);       
}

----在UserRenderer.mxml(ItemRenderer)---

protected function init(event:FlexEvent):void{ //run in CreationComplete
       addEventListener("myEvent", onHandleEvent);
      }

 protected function onHandleEvent():void  {
        trace("Event received");
      }

2 个答案:

答案 0 :(得分:0)

我有谷歌并在gskinner找到了解决方案。但是通过使用此方法,ItemRenderer中的每个项目都会收到一个事件,因此如果您有100个项目(在您的ItemRenderer中),您将记录100个事件。

答案 1 :(得分:0)

这可能有点晚了,但根据你的样本,你的ItemRenderer正在自己监听 - 这就是你永远不会得到这个事件的原因。至于冒泡,记住在目标和捕获阶段,事情从阶段开始,一直到调度目标,然后再次退回。由于您的渲染器是列表的子项,因此它永远不会收到此事件。

如果您希望IR从列表中获取该事件,则需要引用该列表 - 通常是所有者。在这种情况下,这是owner.addEventListener()。您还可以查看分配给每个渲染器的 ListData ,并且该复合对象是对列表的引用。

直接来自文档:

  

事件目标充当事件如何流经显示列表层次结构的焦点。当发生鼠标单击或按键等事件时,Flash Player或AIR应用程序会将事件对象调度到显示列表的事件流 。然后事件对象通过显示列表直到它到达事件目标,此时它开始通过显示列表返回行程。这个到事件目标的往返旅程在概念上分为三个阶段:捕获阶段包括在事件目标节点之前从根到最后节点的旅程,目标阶段仅包括事件目标节点,并且冒泡阶段包括返回到显示列表根目录的任何后续节点

你需要对此有点小心,因为ItemRenderer是ClassFactory创建方法的一部分每个渲染器都将被赋予这个监听器 - 这可能是也可能不是你想要的。