Flex中继器和事件监听器

时间:2009-01-30 06:43:48

标签: flex actionscript-3

乍一看,Repeater控件看起来非常强大,但现在我有了第二个想法。

手头的问题: 向孩子们添加事件监听器

Repeater对象绑定并遍历ArrayCollection,为每个项创建新的Vbox子级。现在,对于每个子节点,Repeater对象将触发“重复”事件,我很想添加eventlistener(用于鼠标事件)。到目前为止没有问题,但是,当ArrayCollection发生变化时会发生什么,我应该如何删除所有旧子节点的EventListener?是否有一些包含我的Vbox实例的子项,我正在文档中跳过? eventlisteners是否会在它们所附着的对象被破坏时很好地清理?

-C编码器在flex / actionscript中丢失

2 个答案:

答案 0 :(得分:6)

我会完全避免使用中继器。从性能的角度来看,它们非常慢,因为这些项目经常被破坏和重新创建。最好使用基于List的控件并实现itemRenderer。

默认情况下,事件侦听器是强引用,因此如果不删除事件侦听器,它将阻止对象被垃圾回收。您可以在addEventListener中使用名为“weakReference”的可选第5个参数,并将值设置为true以添加不会阻止GC的事件侦听器。

为了更好地处理itemRender组件中的事件,您可以实现IDropInListItemRenderer接口。这将使您可以访问“listData”,它具有“owner”属性,该属性是实际的List对象本身。在itemRenderer中,通过所有者调度包含必要数据的自定义事件。如果在创建后将事件侦听器添加到List控件,则可以在包含该控件的组件中执行事件处理。

答案 1 :(得分:0)

好吧,似乎我需要给vbox一个id,之后我就可以将这个id作为一个vbox数组来访问。添加事件处理程序后,我能够使用事件的currentTarget.getRepeaterItem()作为ArrayCollection中对象的引用。

通过循环vbox数组并删除处理程序来处理清理事件处理程序。

不太担心性能,因为项目很少,并且在程序运行时很少改变,尽管这些项目几乎每次运行都会有所不同。除非它不必要地破坏和重新创建物品,否则它不应该成为一个问题。