0

我有自己的自定义组件。该组件从一个基本容器扩展而来。我希望能够访问正在可视化的 itemRenderer 实例。我知道组件 mx:list 有一个内部 getter,它提供一个数组数组,其中包含呈现每个数据提供程序项的 itemRenderer 实例。我想要同样的东西。知道如何做到这一点吗?

更具体地说:我将我的 dataProvider 项目的 selected 属性设置为 true 或 false。从我的 ItemRenderer 的 updateDisplayList 函数中,我检查属性的更改并更正所选属性的边框颜色。不幸的是,我必须强制使用 updateDisplayList 函数。我已经在列表中的 ItemRenderer 上做过一次。只有列表才是实用的,因为通过制作我自己的列表,我能够获得正在渲染的项目列表,因此可视化(不能很多)。通过渲染的 Items 和 updateDisplayList 没有开销。但在这种情况下,我可以有 100 个项目。想象一下检查和更改这么多项目的样式。谢谢

4

2 回答 2

1

Flex 架构师故意让这件事变得困难,因为他们正确地封装了组件。简而言之,即使尝试这样做也违反了良好的 OOP 原则。

也就是说,您可能尝试做的大约 90% 的事情可以通过操作数据项来完成,剩下的 10% 可以通过为您的 itemRenderer 使用 ClassFactory 来完成,该 ClassFactory 将您的 itemRenderer 上的自定义属性设置为回调您可以在其中查看可用于包含上下文的数据,并基于此返回一个值。

如果你详细说明你的最终目标,我可以给你更多细节。


根据澄清进行编辑:

您需要让您的数据对象类在事件发生更改时调度一个事件(一种方法是使其可绑定,或者只是使选定的属性可绑定)。然后,在您的渲染器中,侦听更改事件并采取适当的操作。

处理此问题的第二种方法是 refresh() 集合,首先存储 selectedItem (如果您关心的话)并在刷新完成后将其重置。

于 2012-10-30T22:04:21.933 回答
0

我相信您可以通过 getChildAt 方法访问 itemRenderer 实例。Flex 3 的容器覆盖了“getChildAt”、“numChildren”,因为有些子项是逻辑子项,而有些是装饰性子项,例如背景、边框和滚动条。

请记住,itemRenderer 可能不会在 dataProvider 分配时立即可用,因为它们可能会在下一个组件生命周期中创建。检查底层容器的文档并找出在确定创建渲染器时要侦听的事件,以便您可以可靠地访问它们。

于 2012-10-30T17:20:57.213 回答