1

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

这是我几个月来一直在使用的方法,但我从不怀疑这是否是一种不好的做法。

或者更不用说糟糕的做法了,这样做的最佳方法是什么?

4

2 回答 2

3

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

一般来说,您应该只在事件实例中存储与事件本身相关的数据。您可以使用event.targetevent.currentTarget属性来引用回调度事件的对象并以这种方式获取数据。

在您的情况下,您的事件是复选框状态更改。除了正在检查的项目(您可以使用“目标”或“当前目标”获得)之外,事件本身(被检查)不需要任何与之关联的数据。因此,我认为执行以下操作会更合适:

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

这使您的事件更具可重用性

于 2012-12-13T17:51:53.470 回答
1

带有数据的事件的最佳实践是使用自定义事件(请参阅http://cookbooks.adobe.com/post_AS3__Creating_and_dispatching_Custom_Events-17609.html)进行解释

顺便说一句,另一个“最佳实践”是避免在代码中使用通用 Object 类 - 相反,创建一个值对象类

于 2012-12-13T22:03:15.513 回答