说,我有一个带复选框的数据网格,每次标记一个复选框时,我将对象存储在flex ResultEvent的data属性中
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());
}
这是我几个月来一直在使用的东西,但如果这是一个不好的做法,我从来没有想过。
或者更不用说不好的做法,这样做的最佳方式是什么?
答案 0 :(得分:3)
这不是真的'糟糕'。但它确实创建了一个对象的附加引用,该对象可能会将该对象保留在内存中更长时间(如果管理不好则无限期)。
一般来说,您应该只在事件实例中存储与事件本身相关的数据。您可以使用event.target
和event.currentTarget
属性引用返回调度事件的对象并以此方式获取数据。
在您的情况下,您的活动是一个复选框状态更改。事件本身(被检查)除了被检查的项目之外不需要任何与之关联的数据(您可以使用'target'或'currentTarget'获得)。因此,我认为执行以下操作会更合适:
Alert.show(MyItemRenderer(event.currentTarget).data.toString());
这可以让您的活动更加可重复使用
答案 1 :(得分:1)
有数据的事件的最佳做法是使用自定义事件(请参阅http://cookbooks.adobe.com/post_AS3__Creating_and_dispatching_Custom_Events-17609.html)进行说明
顺便说一下,另一个'最佳实践'是避免代码中的通用Object类 - 而是创建一个值对象类