我有一个使用自定义ItemRenderer的List.是否有一种方法让所有者(List)将我创建的自定义事件分派给它的所有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,因此列表的YourCustomEvent通过一跳到达所有ItemRenderer.
这基本上是Observer设计模式的实现.