【问题标题】:ItemRenderer vs Repeater in FlexFlex 中的 ItemRenderer 与中继器
【发布时间】:2011-12-19 11:44:51
【问题描述】:

你们中的任何人都知道 ItemRenderer 和 Repeater 之间的区别。 两者的行为几乎相同。有什么区别吗?

【问题讨论】:

    标签: actionscript-3 apache-flex flex4 flex3


    【解决方案1】:

    你们中的任何人都知道 ItemRenderer 和 中继器。两者的行为几乎相同。有什么区别吗?

    我不确定它们如何表现相同,但如果没有看到您的代码,很难判断。我将尝试解释其中的区别;更确切地说;每一个是什么。

    在后台 itemRenderer 是ClassFactory。工厂是创建其他类的类的设计模式。在 Flex 的上下文中,itemRenderer 用于基于列表的类,例如 DataGrid 或 List。基于列表的类接受一个 dataProvider 并且只呈现在屏幕上看到的元素。当您滚动列表时,itemRenderer 生成的每个组件都会被重用。我称之为渲染器回收。因此,实现 itemRenderer 以响应 dataChange 事件非常重要,因此它始终正确呈现它应该表示的数据。有关itemRenderer components 的更多信息。

    Repeater 就像 MXML 中的循环。使用转发器不会提供基于列表的类所提供的任何“渲染器”好处。在循环中创建的所有内容都会立即渲染。

    所以,假设您有一个包含 100 个图像的 dataProvider。您有空间在屏幕上显示其中的 10 个。使用基于列表的类,flex 将渲染和加载 10 张图像;滚动列表时更改加载的内容。使用 Repeater Flex 将一次渲染和加载所有 100 个,即使并非所有这些都在屏幕上。

    【讨论】:

      【解决方案2】:

      最大的不同:Repeater 已被弃用。它作为仅在 Flex 3 中的 mx 组件存在,在 Flex 4 中没有等效的 Spark。建议您改用 DataGroup+ItemRenderer。 @www.Flextras.com 的回答非常清楚地解释了造成这种情况的主要原因。

      除此之外,IMO 除了最基本的使用中继器之外的任何东西都可能是一个严重的痛苦。它的范式与所有其他 Flex 组件完全不同,而 DataGroup+ItemRenderer 方法非常符合 Flex 组件集。

      底线:不要使用中继器。使用Repeater 没有什么是DataGroup+ItemRenderer 无法做到的。 (除非您出于某种原因无法使用 Flex 3。请参阅 Amy 的 cmets 了解更多信息。)

      【讨论】:

      • 我不同意(至少在谈到 Flex 3 列表时)。由Repeater 添加的Flex 组件直接添加到父组件,因此它们的行为更像您所期望的。在 Flex 3 中,列表的实现并不那么好,因此您经常不得不不必要地覆盖渲染器上的生命周期方法,或者深入研究列表代码以进行补偿。我不知道Repeater 引擎盖下到底发生了什么,但我使用它的次数大约是Lists 的1/3。相比之下,我对 Flex 3 列表的架构有很好的了解(因为我不得不花费大量时间来修复它们)。
      • @AmyBlankenship 我知道你会的;)(不是第一次讨论这个话题)。我必须承认,自从 Flex 4 面世以来,我从未回顾过 Flex 3,但我清楚地记得,为了让它做我想做的事,我做了很多黑客攻击。我确实提到过,在 Flex 3 中它可能是一个不同的故事,尽管我可能有点曝光不足。
      • 我不认为“不要使用转发器”回答了关于 itemRenderer 和转发器之间区别的问题。我很高兴听到中继器已被弃用;但你有消息来源吗?它仍然记录在 4.6 文档 (help.adobe.com/en_US/flex/using/…) 中,并且 ASDocs 中没有任何内容将其声明为已弃用 (help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/…)。
      • @www.Flextras.com Adob​​e 从未将任何东西标记为已弃用(据我所知——我从未使用过 Flex 2)。我只是想说没有计划构建一个 Spark 版本的 Repeater(相对于其他组件),并且鼓励使用 DataGroup 来代替。一个糟糕的词选择可能是因为它从未被正式弃用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2013-07-28
      • 2013-03-31
      • 2012-01-21
      相关资源
      最近更新 更多