获取呈现的项目列表

时间:2012-10-30 16:16:18

标签: actionscript-3 flex flex3

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

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

2 个答案:

答案 0 :(得分:1)

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

也就是说,您可能尝试做的事情大约有90%可以通过操纵数据项来完成,其余10%可以通过使用ItemRenderer的ClassFactory来完成,该ItemRenderer在itemRenderer上设置自定义属性在回调中,您可以查看包含上下文的可用数据,并根据该值提供返回值。

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


根据澄清进行编辑:

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

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

答案 1 :(得分:0)

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

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