Si vos instances ItemRenderer personnalisés ont accès à l'instance de la liste en quelque sorte, il est straigh avant - juste enregistrer votre méthode de gestion des événements:
theList.addEventListener(YourCustomEvent.CUSTOM_EVENT, itemRendererCustomHander);
Si vous n'avez pas accès direct (ce que je suppose), vous pouvez toujours le faire indirectement, par exemple via un délégué de l'objet de classe ItemRenderer. Faire une instance d'une sous-classe de EventDispatcher une Propriété statique de la classe ItemRenderer, et dans votre ItemRenderer constructeur, inscrivez-vous un gestionnaire d'événements avec elle:
public class ItemRenderer {
public static var eventDelegate:YourCustomEventDispatcher;
public function ItemRenderer() {
eventDelegate.addEventListener(YourCustomEvent.CUSTOM_EVENT, itemRendererCustomHander);
(...)
}
public function itemRendererCustomHander(event:YourCustomEvent) {
(...)
}
}
Maintenant, lorsque vous créez theList (dans ActionScript ou dans le initialize gestionnaire d'événements de votre composant MXML), créez un nouveau YourCustomEventDispatcher, donnez-lui une référence à theList et ajoutez-le à ItemRenderer. YourCustomEventDispatcher enregistre un gestionnaire d'événement privé pour YourCustomEvent avec theList, et le redispose simplement. Comme toutes les instances ItemRenderer sont à leur tour enregistrées pour YourCustomEvent avec YourCustomEventDispatcher, YourCustomEvent de theLists atteint tous les ItemRenderers via un seul saut.
Il s'agit essentiellement d'une implémentation du modèle de conception Observer.
Nice, c'est l'accès direct que je ne savais pas avant maintenant :-) C'est encore mieux que ma solution ci-dessus parce que vous pouvez avoir plusieurs listes avec la même classe ItemRenderer et n'avez pas besoin de configurer plusieurs eventDelegates. – Simon
Exactement :) L'architecture des moteurs de rendu Flex est assez puissante .. Je voudrais savoir quels cas d'utilisation pourraient nécessiter un rendu d'élément pour écouter les événements du composant liste. –