我有一个使用自定义ItemRenderer的列表。所有者(列表)是否可以将我创建的自定义事件调度到其ItemRenderer的所有实例?

例如,我要调度一个事件,该事件会将文本添加到项目渲染器中的文本框。一个或多个项目渲染器将能够根据某些用户交互来响应此事件。

有办法吗?

谢谢 :)

最佳答案

如果您的自定义ItemRenderer实例可以某种方式访问​​List实例,则可以直接进行-只需注册事件处理方法即可:

theList.addEventListener(YourCustomEvent.CUSTOM_EVENT, itemRendererCustomHander);


如果您没有直接访问权限(我假设是这样),您仍然可以间接进行访问,例如通过ItemRenderer的类对象的委托。使EventDispatcher的子类的实例成为ItemRenderer类的静态属性,并在您的ItemRenderer构造函数中向其注册一个事件处理程序:

public class ItemRenderer {
    public static var eventDelegate:YourCustomEventDispatcher;

    public function ItemRenderer() {
        eventDelegate.addEventListener(YourCustomEvent.CUSTOM_EVENT, itemRendererCustomHander);
        (...)
    }

    public function itemRendererCustomHander(event:YourCustomEvent) {
        (...)
    }
}


现在,当您创建List时(在ActionScript中或在MXML组件的Initialize事件处理程序中),创建一个新的YourCustomEventDispatcher,为其提供对List的引用,并将其添加到ItemRenderer。 YourCustomEventDispatcher使用List为YourCustomEvent注册一个私有事件处理程序,然后重新分发它。由于所有ItemRenderer实例又都向YourCustomEventDispatcher注册了YourCustomEvent,因此Lists的YourCustomEvent通过一跳到达所有ItemRenderer。

这基本上是观察者设计模式的实现。

08-16 05:59