应该通过事件传递多少信息?

时间:2012-12-13 16:11:03

标签: actionscript-3 events

说,我有一个带复选框的数据网格,每次标记一个复选框时,我将对象存储在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());
}

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

或者更不用说不好的做法,这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

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

一般来说,您应该只在事件实例中存储与事件本身相关的数据。您可以使用event.targetevent.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类 - 而是创建一个值对象类