Delegate mal anders
Jeder, der mit AS2 arbeitet, kennt die Scope Probleme und wird früher oder später zwangsläufig mit einer Delegate Klasse arbeiten.
addEventListener(Event.EVENT, Delegate.create(this, onEvent));
Die Delegate Klasse gibt eine Funktion zurück, die auf die entsprechende Methode verweist. Problematisch wird das, wenn man beispielsweise den Event Listener wieder entfernen möchte. Hier bin ich üblicherweise hingegangen und habe mit einer Instanzvariable gearbeitet:
private var delegate:Function;
...
delegate = Delegate.create(this, onEvent);
addEventListener(Event.EVENT, delegate);
removeEventListener(Event.EVENT, delegate);
Aber man lernt ja nie aus und gestern bin ich auf einen interessanten Lösungsansatz gestoßen. Und zwar kann man einfach die Methode mit ihrem Delegate überschreiben und anschließend die Methode quasi direkt ansprechen. Leider ist dieser Ansatz nicht ganz sauber, aber von der Anwendung doch eine feine Sache.
public function destroy():Void
{
button.removeEventListener(Event.EVENT, onEvent);
}
private function init():Void
{
// Methode überschreiben
onEvent = Delegate.create(this, onEvent);
button.addEventListener(Event.EVENT, onEvent);
}
private function onEvent(e:Event):Void
{
}
Da kommt ja fast AS3 Feeling auf. Also danke für den Tipp!