vogel (AT) djd (DOT) de wrote:
Quote:
Nun möchte ich aber anfangen Ajax in meine Anwendungen zu integrieren.
Wie Ajax funktioniert hab ich mir schon teilweise angeeignet, aber wie
schaffe ich weiterhin die strikte Trennung zwischen Logik und Design
umzusetzen? Eigentlich müsste ich den JS-Code ja in meine Templates
packen aber das widerstrebt mir sehr. Hat das schonmal jemand
realisiert oder hat eine Idee wie ich das machen kann? |
Wenn Du den Code partout nicht in die Templates packen willst,
gibt es verschiedene Möglichkeiten.
a) Du packst ihn in separate Javascript-Dateien. Die PHP-Datei
"weiss" ja, welche Javascript-Dateien sie braucht. Ich habe
jetzt hier z.B. eine Application-Singleton-Klasse definiert,
in die eine PHP-Datei dann Anforderungen über eine Methode
addScript() machen kann. Wie weit man das dann formalisiert,
ist einem selber überlassen. Der Masterpagecontroller - oder
wie man die Klasse auch nennen will - fügt dann die gewúnschten
Skripte in den head in script-Tags ein, sortiert Dubletten aus
undsoweiter... Ob man jetzt eine Engine, die Skriptabhängigkeiten
berücksichtigt, dazu schreibt, muss man selber wissen. :-)
b) Eine andere Option, wo ich über Prototype (jaja, Thomas ;-)
drauf gekommen bin, das wertet AJAX-Antworten vom entsprechenden
MIME-Typ (text/javascript und Konsorten) direkt mit eval aus.
Das kann man natürlich auch in seiner eigenen Bibliothek
implementieren und so das AJAX-Backend Antworten in Javascript
geben lassen. Wenn man das irgendwie formalisiert (was ich
noch nicht gemacht habe), kann das sehr mächtig werden.
Persönlich finde ich das mit dem Code in den Templates nicht
ganz so wild, man kann es aber natürlich mit Methode a) strikt
getrennt halten. Ich finde es aber in Zusammenhang mit Methode
b) auch sehr interessant, bestimmte quasi Interfaces zu
definieren, wo ich dann über standardisierte Javascript-Methoden
auf der Seite die Antworten auf AJAX-Aktionen definieren
kann, z.B. doInsertOk() und doInsertFail(), wenn man einer
DB-Tabelle ein Element hinzufügt. Die Methoden gibt es
dann auf jeder Seite, aber sie sind halt an das Template
angepasst und machen unterschiedliche Sachen.
Ja, das Beispiel kann man auch über den http-Responsecode abhandeln,
aber diese Methode ist halt noch um einiges mächtiger.
(Ich denke z.B. mal wieder darüber nach, wie man PHP-Exceptions
zum Javascript effektiv und sinnvoll forwardet.)
Hoffend, ein paar Anregungen gegeben zu haben,
OBW