War eigentlich mehr ne Überlegung, aber hier mal ein Ansatz, als Vorlage diente
atotheks Delegate allerdings habe ich einige Änderungen vorgenommen:
* keine Übergabe von Strings für die Methode
* Parameter werden als Array und nicht als weitere Argumente übergeben
* Reihenfolge der Parameter vom Delegate vertauscht
PHP-Code:
class Delegate
{
private static var delegateMap : Object = new Object();
public static function create(obj:Object, func:Function, params:Array, id:String) : Function
{
var delegate : Function = function() {
return func.apply(obj, params.concat(arguments));
};
if (id != null) {
if (delegateMap[id] != null) {
throw new Error("Delegate#create - there is already a Delegate for id '" + id + "'");
} else {
delegateMap[id] = delegate;
}
}
return delegate;
}
public static function remove(id:String) {
var delegate : Function = delegateMap[id];
if (delegate == null) {
throw new Error("Delegate#remove - there is no Delegate to remove for id '" + id + "'");
} else {
delete delegateMap[id];
return delegate;
}
}
}
Anwendung wäre dann
PHP-Code:
component.addEventListener("myEvent", Delegate.create(this, myMethod, ["myParameter"], "myId"));
// ...
component.removeEventListener("myEvent", Delegate.remove("myId"));