2012-12-13 27 views
1

说,我有一个复选框一个DataGrid,每一个复选框标示为我存储在弯曲的ResultEvent应该通过事件传递多少信息?

public class MyItemRenderer extends ItemRenderer{ 

    public static var CLICK:String = "CheckBoxClick";  

    protected function itemRendererClickListener(data:Object):void{ 

    dispatchEvent(new ResultEvent(MyItemRenderer.CLICK, data)) 
    } 

} 

的数据属性的对象我在这里处理的结果。

protected function checkbox_clicked(event:ResultEvent):void{ 
    //Here I do everything I want with the data. 
    Alert.show(event.result.toString()); 
} 

这是我一直使用了几个月,但我从来没有想过如果这是一个不好的做法。

更不用说不好的做法,那么做到这一点的最佳方法是什么?

回答

3

这不是真的'坏'。但它确实创建了一个对象的附加引用,该对象可能会将该对象更长时间地保存在内存中(如果管理不好,则无限期地)。

一般而言,您应该只在事件实例中存储与事件本身相关的数据。您可以使用event.targetevent.currentTarget属性重新引用分派事件并以此方式获取数据的对象。

就你而言,你的事件是复选框状态变化。事件本身(被检查)除了被检查的项目(你可以用'target'或'currentTarget'得到)之外不需要任何与它相关的数据。因此,这将做到以下几点是我认为比较合适的:

Alert.show(MyItemRenderer(event.currentTarget).data.toString()); 

这样可以使您的活动更可重复使用的