Element-Update mit JavaScript als Inhalt
Posted in JavaScript, Symfony Framework on July 19th, 2009 by admin – Be the first to commentIn Symfony haben wir ja eine sehr hilfreiche und dem entsprechend auch Helper genannte Kapselung von JavaScript Bibliotheken. So steht auch unter anderem Prototype zur Verfügung. Nur manchmal lässt sich die API-Dokumentation der Bibliotheken nicht direkt auf die in Symfony zur Verfügung stehenden Funktionen übertragen. Ein Beispiel ist der evalScripts Parameter. Für alle die jetzt zu faul sind weiter zu lesen und schon wissen was gemeint ist: In Symfony heißt der Parameter einfach nur script
Für alle die noch nicht Wissen wofür der Parameter gebraucht wird, kommt hier ien Beispiel:
Die Funktion remote_function() ist das Symfony-Interface zur AjaxUpdater-Funktion von Prototype, mit der wir ein DOM-Element unserer Seite mit neuem Inhalt befüllen können ohne die komplette Seite neu zu laden (ist ja auch der Sinn von AJAX-Funktionen xD).
Das ganze könnte dann beispielsweise in einem Template so aussehen:
-
<?php use_helper(‘Javascript’) ?>
-
<div id="dynamicContent"></div>
-
‘update’ => ‘dynamicContent’,
-
‘url’ => ‘artikel/render’,
-
))."}"
-
) ?>
Soweit so gut. Ein kleines Problem haben wir jetzt nur, wenn der Aufruf des Moduls/Action ‘artikel/render’ in seinem Template ein JavaScript hat. Beispielsweise durch die Funktion drop_receiving_element(), weil in dem DIV mit der ID dynamicContent ein Element sein soll, welches Drag-And-Drop fähig sein soll. Standartmäßig werden nämlich JavaScripts durch den Ajax.Updater gefiltert. Abschalten lässt sich das bei dieser Prototype-Funktion durch den Parameter evalScripts. Die Symfony-Funktion remote_function() akzeptiert diesen Parameter allerdings nicht, sondern wie am Anfang schon erwähnt den Parameter script. Um diesen Parameter und folglich dann ohne JavaScript-Filter sieht der Funktions-Aufruf aus dem Beispiel dann folgendermaßen aus:
-
‘update’ => ‘dynamicContent’,
-
‘url’ => ‘artikel/render’,
-
’script’ => ‘true’,
-
))
Das wars schon =)



