Javascript Delegation


Mittels Javascript lassen sich sehr angenehmen Web Applikationen bauen -> aber ich muss sagen, es ist auch nicht ganz so einfach und ich bin kein Fan davon. Vor einigen Jahren kam das Paradigma auf, dass man Events an HTML Objekte anhängt. Mit JQuery sah das dann etwa so aus:

$('#id').click(function(){…});

Beim Click auf Container #id wird jetzt die spezifizierte Funktion ausgeführt. Das funktioniert auch sehr gut, ausser, wenn AJAX oder meistens AHAH ins Spiel kommt. Der Ablauf beim sog. Binding ist nämlich wie folgt:

Seite wird geladen, dann werden die Funktionen an die Objekte gebunden und dann wird gewartet. Wenn jetzt noch weitere Objekte dynamisch via AHAH hinzukommen, oder ersetzt werden, dann ist natürlich diese Funktion nicht mehr ans Element gebunden und die ganze Funktionalität bricht ein.

Lösung wäre, diese Binding nachträglich durchzuführen, was jedoch meistens nicht sehr praktisch ist. Daher gibt es ein neues Paradigma: Delegation. Ich muss sagen, dass ich davon nicht wirklich eine Ahnung habe, aber ich verstehe die Grundidee:

Ein Event wird an einen Container Parent Container (nicht direkt an das Element) gebunden -> z.B. das Body Tag. Beim Click auf den Container wird dann sozusagen geschaut, ob das geklickte Element ein Element ist, auf welchem man eine Aktion ausführen möchte. Das wäre dann einfach so was wie ein Switch statement wo gecheckt wird. Wenn jetzt im Container drin HTML Objekte verändert werde (sprich neue Element hinzukommen), dann spielt das gar keine Rolle, da ja ein Event an den Parentcontainer gebunden ist und erst beim Klicken dynamisch geschaut wird, was passieren soll und mit welchem Objekt.

Ich verwende im Moment ein JQuery Plugin Delegate, welches auch ganz praktisch ist und das ganze Handling übernimmt. Super genial, aber ein bisschen gewöhnungsbedürftig.

Also, dieses Post soll in keiner Weise versuchen zu erklären, was Delegation ist, aber wenigstens ein Denkanstoss sein. Detaillierter und bessere Erklärungen gibt es viele im Netz und falls jemand gerne Widersprechen möchte: nur zu!