Einzelnen Beitrag anzeigen
Alt 18-12-2007, 12:09   #5 (permalink)
Janoscharlipp
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
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:Objectfunc:Function, params:Array, id:String) : Function
    {
        var 
delegate : Function = function() {
            return 
func.apply(objparams.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(thismyMethod, ["myParameter"], "myId"));
// ...
component.removeEventListener("myEvent"Delegate.remove("myId")); 
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)

Geändert von Janoscharlipp (18-12-2007 um 12:11 Uhr)
Janoscharlipp ist offline   Mit Zitat antworten