Wenn Ihre benutzerdefinierten ItemRenderer Instanzen Zugriff auf die List-Instanz haben irgendwie, es ist straigh vorwärts - registrieren Sie Ihre Event-Handling-Methode:
theList.addEventListener(YourCustomEvent.CUSTOM_EVENT, itemRendererCustomHander);
Wenn Sie keinen direkten Zugriff haben (was ich annehme), du kannst es immer noch indirekt tun, zB durch einen Delegaten des Klassenobjekts des ItemRenderer. Machen Sie eine Instanz einer Unterklasse von Eventdispatcher eine statische Eigenschaft der ItemRenderer Klasse, und in Ihrem ItemRenderer Konstruktor, registrieren Sie einen Event-Handler mit ihm:
public class ItemRenderer {
public static var eventDelegate:YourCustomEventDispatcher;
public function ItemRenderer() {
eventDelegate.addEventListener(YourCustomEvent.CUSTOM_EVENT, itemRendererCustomHander);
(...)
}
public function itemRendererCustomHander(event:YourCustomEvent) {
(...)
}
}
Wenn Sie jetzt theList (entweder in Actionscript oder in der initialize erstellen Ereignishandler Ihrer MXML-Komponente), erstellen Sie einen neuen YourCustomEventDispatcher, geben Sie ihm einen Verweis auf theList, und fügen Sie ihn dem ItemRenderer hinzu. YourCustomEventDispatcher registriert einen privaten Ereignishandler für YourCustomEvent mit theList und setzt ihn einfach erneut. Da alle ItemRenderer-Instanzen wiederum mit YourCustomEventDispatcher für YourCustomEvent registriert sind, erreicht das YourCustomEvent derLists alle ItemRenderer über einen Hop.
Dies ist im Grunde eine Implementierung des Observer Entwurfsmusters.
Schön, dies ist der direkte Zugriff, den ich bis dahin nicht kannte jetzt :-) Es ist sogar besser als meine obige Lösung, weil Sie mehrere Listen mit derselben ItemRenderer-Klasse haben können und nicht mehrere eventDelegates einrichten müssen. – Simon
Genau :) Flex-Element-Renderer-Architektur ist ziemlich mächtig .. altuent Ich würde gerne wissen, welche Use Cases erfordern können Elementrenderer auf Ereignisse aus der Liste Komponente zu hören .. –