获取渲染项目的列表

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

更具体地说:我将我的dataProvider项目的选定属性设置为true或false。 从我的ItemRenderer的updateDisplayList函数中,我检查属性的更改并更正所选内容的边框颜色。 不幸的是我不得不强制updateDisplayList函数。 我已经在列表中的一个ItemRenderer上执行了这个操作。 只有列表是实用的,因为通过创建我自己的列表,我能够获取正在呈现的项目列表并因此可视化(不能很多)。 通过渲染的Items和updateDisplayList没有任何开销。 但在这种情况下,我可以有100个项目。 想象一下检查和改变这么多项目的风格。 谢谢


Flex架构师故意做这件事很困难,因为他们正在封装组件。 简而言之,即使尝试这样做也违反了良好的面向对象原则。

也就是说,你可能试图做的事情中有90%可以通过操作数据项来完成,剩下的10%可以通过为itemRenderer使用ClassFactory来完成,该过程将itemRenderer上的自定义属性设置为回调函数您可以在其中查看可用于包含上下文的数据并根据该数据提供回值。

如果你详细阐述一下你的最终目标,我可以给你更多的细节。


根据澄清进行编辑:

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

处理这种情况的第二种方法是刷新()集合,首先存储selectedItem(如果你关心的话),并在刷新完成后重置它。


我相信你可以通过getChildAt方法访问itemRenderer实例。 考虑到一些孩子是逻辑孩子,Flex 3的容器覆盖“getChildAt”,“numChildren”,而一些孩子则是装饰性的孩子,如背景,边框和滚动条。

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

链接地址: http://www.djcxy.com/p/34643.html

上一篇: Getting a list of the rendered items

下一篇: Checkbox Images in List