JavaScript mal ganz objektiv
Der Weg über GET war also eine Sackgasse. Vor allem wenn man größere Datenmengen transportieren will ist dieser Weg nahezu ungangbar. Wir brauchen also so eine Art Container wo wir unsere Daten rein packen können. Im Grunde genommen war der Ansatz mit den zwei Script-Blöcken ja gar nicht so dumm. Wo war noch gleich unser größtes Problem? Richtig, ein anderes JS könnte die gleichen Variablennamen verwenden. Nun kann man solche Probleme lösen indem man seinen Variablen einen Präfix verpasst. WordPresser lieben Präfixe, bei WP’lern heisst sogar das Kuscheltier teddy_Bear. Nun ist es aber nicht wirklich handlich alle Varibalen mit einem wirklich uniquen Präfix wie z.B. Hackorzzz_unique_Plugin_
zu versehen. Das JS wäre nach wenigen Zeilen doch arg unübersichtlich.
Schön wäre es, hätte JavaScript so etwas wie Namespaces. Hat es nicht wirklich, genauso wenig wie PHP (bis Version 5.3). Aber JavaScript kennt Objekte:
function print_object_script(){ $vars = array( 'my_js_var' => 'Hallo Welt!', 'anothervar' => 'Schubidu'); $object_name = 'Foo'; $js_object = ''; $js_object = "function {$object_name}(){\n"; foreach( $vars as $key => $val ){ $js_object .= "this.{$key} = '{$val}';\n"; } $js_object .= "};\n"; echo "<script type='text/javascript'>\n{$js_object}</script>\n"; }
Jetzt wird in etwa dieser Script-Block erzeugt:
<script type="text/javascript"> function Foo(){ this.my_js_var = 'Hallo Welt!'; this.anothervar = 'Schubidu'; }; </script>
In unserem JS können wir nun mit var bar = new Foo;
ein neues JS-Objekt erzeugen und dann mit bar.my_js_var
bzw. bar.anothervar
auf die Inhalte zugreifen. Der große Vorteil an der Sache ist der, dass man so Zugriff auf die ganze komplexe Welt der JavaScript-Objekte hat. Man könnte also auch verschiedene Funktionen und Methoden in Abhängigkeit diverser Zustände unterbringen.
// Mehr Foo.prototype.myX = function(y) { this.x += y; } // Oder weniger Foo.prototype.myX = function(y) { this.x -= y; }
Eingelogtgte Benutzer bekommen z.B. die erste Funktion vor die Füße geworfen, unregistrierte Gäste die zweite Funktion. Der Vorteil daran ist, dass man das JS nicht mehr anfassen muss, es macht immer das gleiche. Und zwar die Ergebnisse der Funktion in irgend einen Bereich ausgeben:
jQuery(function ($){ $(document).ready(function(){ if( $("#header").is("*") ){ bar = new foo(); $("#blog-title").text(bar.my_js_var); $("#blog-description").text( bar.myX(5) ); } }); });
Diese Methode kann also ganz nützlich sein um quasi einen Teil des JS On The Fly zu erzeugen. Aber um wirklich größere oder gar komplexere Datenmengen abzubilden ist sie nicht das Wahre. Viel zu viel Handarbeit.
Schlagworte: Anfänger, Fortgeschrittene, JavaScript, JS, Lokalisation, PHP