piątek, 28 marca 2014

jQuery: event handler document.ready odpalony więcej niż raz w Zend Framework 1

Zasadniczo nie ma możliwości aby event document.ready został odpalony więcej niż raz. Przekornie użyłbym tu akurat słowa 'teoretycznie', bo przecież nikt tego matematycznie nie udowadniał, ale nie ma co się zagłębiać w ten temat. Mimo wszystko może się zdarzyć, że nasz handler tego eventu zostanie odpalony więcej niż raz. Wbrew pozorom to nie takie trudne aby do tego doprowadzić, a przyczyna jest tak prosta, że nie koniecznie oczywista.

Nic nie stoi na przeszkodzie, aby ten sam handler eventu został odpalony więcej niż raz. Zwykle będzie to z powodu wielokrotnego podpięcia do eventu. Jeden ze sposobów na takie wielokrotne podpięcie jest załadowanie tego samego pliku js w więcej niż jednym miejscu na stronie. Jeśli więc handler eventu document.ready odpala się więcej niż raz, warto sprawdzić, czy plik, w którym jest rejestrowany, nie został załadowany dwa razy.

W Zend Framework może to być całkiem łatwe do doprowadzenia. Do dodawania skryptów do strony istnieje viewHelper o nazwie headScript. Można powiedzieć, że jest to kontener skryptów. Aby z tego kontenera skorzystać wystarczy dodać do niego plik. Gdzieś jednak te wszystkie pliki trzeba wykorzystac. Tu może pojawić się problem. Prawidłowo byłoby w layout dodać wywołanie:
<?= $this->headScript(); ?>
Powyższa linia kodu spowoduje wypisanie w tym miejscu wszystkich skryptów z kontenera. Może się jednak zdarzyć, że ktoś nie wie jak tego helpera użyć i będzie go używał inaczej. Możemy wtedy w kodzie znaleźć coś takiego:
<?= $this->headScript()->appendFile('scripts/js/cokolwiek.js'); ?>
Takie wywołanie powoduje dołączenie skryptów z headScript właśnie w tym miejscu. Może to łatwo doprowadzić do tego, że będą one dołączone zarówno w layocie jak i w samym widoku. To jest całkiem prosta metoda na wielokrotne dołączanie skryptu.

Brak komentarzy:

Prześlij komentarz