Adobe Flex: ClickEvent IN ItemRenderer verarbeiten

Da baut man eine TileList in der eigentlich nur Bilder angezeigt werden – soweit kein Problem da gibt es tausend Beispiele für. Um Interaktionen umzusetzen setzt man das click Event in der TileList und über „selectedIndex“ weiss man auch was angeklickt worden ist…

ABER:

Jedes Bild hat eigene Buttons, um zB das Bild aus der TileList (dem Datenmodell das als DataProvider dient) zu löschen und hier fängt der Spaß an. Zu allem Überfluss nutze ich die ItemRenderer einmal in einer TileList und einmal in einer HorizontalList. Die Frage ist also wie verarbeite ich das Click Event der ItemRenderer…

Ansatz 1: Ein eigenes Event erstellen:
Eigene Events sind super, kommen keinem anderen in die Quere und man kann sie auf beliebiger Ebene fangen. Aber wenn man irgendwo was ändert muss man auch dran denken den EventListener anzupassen und schon sucht man sich durch all seine QuellDateien oder man ist faul und wartet was der Compiler wirft ;)

Ansatz 2: Im ItemRenderer das Event verarbeiten und sich „hochcasten“ zur TileList/HorizontalList um den „selectedIndex“ herauszubekommen. Da beide Komponenten die „BaseList“ erweitern und „selectedIndex“ auch eine Eigenschaft der „BaseList“ ist, kann man beide Komponenten auf „BaseList“ casten:

  private function deleteMe(event:MouseEvent):void {
    var deleteIndex:Number = -1;
    try {
        // start casting from the ItemRenderer Component, not from the Button which started it
	deleteIndex = (this.parent.parent as ListBase).selectedIndex;
    } catch ( error:TypeError ) {
        // just catch it, nothing to do
        trace("TYPEERROR: Casting as ListBase Failed!");
    }

    if ( deleteIndex >= 0 ) {
       Data.getInstance().deleteImage(deleteIndex);
    } 
  }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.