【问题标题】:Flex: How to listen to event in ItemRendererFlex:如何在 ItemRenderer 中监听事件
【发布时间】:2013-07-20 16:15:21
【问题描述】:

我尝试在 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");
      }

【问题讨论】:

  • itemrenderer 不在您拥有点击处理程序的 Button 的事件传播路径中。你可以试试list.dispatchEvent(eventObject),但我认为这也行不通。你为什么不操纵数据提供者而不是这个?
  • @SamDeHaan 所以你说没有办法在 itemRenderer 中有一个监听器,即使有自定义事件?嗯,太糟糕了
  • 这是可能的,但事件只会从调度程序“向上”传播。 livedocs.adobe.com/flex/3/html/help.html?content=events_08.html 您需要找到一种方法来在 itemrenderer 的“下方”分派事件,这很困难。
  • 或者,您可以使用某种形式的全局(静态)事件调度程序,itemrenderers 和主类会引用它。我自己没有做过,但应该可以。
  • @SamDeHaan 事件传播,但是按钮是itemRenderer父容器(列表)的单独部分,事件传播会到达按钮吗?我需要对 Global static eventdispatcher 做一些研究

标签: apache-flex flex4 flex4.5 flexbuilder


【解决方案1】:

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

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

直接来自文档:

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

您需要注意这一点,因为 ItemRenderer 是 ClassFactory 创建方法的一部分。每个渲染器都将被分配此侦听器 - 这可能是您想要的,也可能不是。

【讨论】:

  • 我发现在 IR 中收听事件并不是一件好事,我使用了另一种方法来解决我的问题。谢谢
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2020-11-22
    • 2023-04-02
    相关资源
    最近更新 更多