Ein typisches Problem im Umgang mit AJAX ist die (re-)Initialisierung von Scripts auf den nachträglich geladenen Inhalt. Im JTL-Shop 4 stößt man darauf beispielsweise auf Kategorieübersichten bei der Seitennavigation.
Viele Systeme, viele Lösungen
Viele Frameworks / CMS-Systeme bieten hier Abhilfe durch die Bereitstellung eigener Logiken, um auf das Nachladen von Inhalten zu reagieren. Drupal nutzt hier beispielsweise den sehr klugen "behaviours", siehe z.B. https://www.lullabot.com/articles/understanding-javascript-behaviors-in…
Die Lösung im JTL-Shop4: evo:contentLoaded
JTL nutzt im JTL-Shop ein Event, das nach dem Laden von AJAX-Inhalten getriggert wird. Es heißt "evo:contentLoaded". Auf dieses können sich Scripte via Event-Bindings registrieren, siehe z.B. http://api.jquery.com/on/.
Code-Beispiel:
$(document).on('evo:contentLoaded', function(){
alert('Diese Meldung erscheint wann immer ein Inhalt nachgeladen wurde!');
});
Verbesserungsmöglichkeiten
Schön wäre noch, wenn als Parameter der Funktion nur der neu geladene DOM-Teil geliefert würde. Leider ist dies aber derzeit noch nicht der Fall. Die Funktion wird ohne Argumente aufgerufen.
Zudem ist diese Option leider bisher kaum von JTL dokumentiert, ich konnte sie lediglich in einigen Diskussionen und im Quellcode finden, aber noch nicht im JTL Wiki. Solltet ihr sie entdecken, lasst es mich bitte wissen, dann ergänze ich hier einen Link.
Ich freue mich über einen Kommentar, wenn Euch dieser Beitrag geholfen hat.