Open ElectricMaxxx opened 11 years ago
Also ich würd ja die zweite Variante wählen. Also für jeden Zweck ein eigenes Template und dann die Teile, die sich irgendwie verallgemeinern lassen, auslagern.
Also so wie ich es hier schon probiert habe:
var renderFile = "default";
switch(action)
{
case 'index':
case 'list':
renderFile = 'adminList';
break;
case 'edit':
case 'create':
renderFile = "adminEdit";
break;
}
res.render(renderFile,finalContent);
Nur, dass ich wohl die "Entscheidung" dem jeweiligen Modul überlasse, dass den Content bereit stellt. Dazu müsste ich mir das app-(express)-object mit in die Module nehmen, um per app.set("renderFile","bsp"); eine Variable zu belegen, oder sollte ich mir die Entscheidung mit dem Content zusammen vom Module zurück geben lassen?
So nun mal wieder der der nächste Punkt. Diesmal ist es kein wirklicher Fehler - eher eine philosophische Frage den Aufbau betreffend.
Ich benutze als view engine: jade.js finde ich ganz praktisch vom reinen erstellen der Templates. Auch das verschachteln von Templates über extends und block funktioniert super. Aber was mich so ein wenig stört ist die Flexibilität.
Ich kann zwar das Template voll stopfen mit if- und case-Anweisungen. Das führt für mich aber ein Template ad absurdum (meine Ansicht). Ich möchte eigentlich im sog. Model mir den Content so zusammen suchen wie ich ihn brauche und Ihn dann in einem Array/Json-Object sammeln. Dann hätte ich im Template nur noch
if content.bla #{content.bla} (hier mal wieder am Beispiel von jade)
Soweit so gut, das geht ja auch. Aber wie kann ich flexibel sein bei der Auswahl der Templates. Denn im Grunde kann es ja mehrer Situationen geben: z.B. Content wird einfach nur als Liste ausgeben oder ein ListenItem kann gerade erstellet/bearbeitet werden. Das eine wäre eine Tabelle das zweite ein Formular.
Was ich auf keine Fall sehen will ist: if content.type==list //alles für die Tabelle aus table tr td ... if content.type==edit //mache Formular form ul li: input....
Das könnte dann ja für die Möglichkeiten ewig gehen. Schön wäre eine Möglichkeit: //in der layout.jade block content
contentWrapper.contentWrappeClass
mit dann verschiedenen Dateien, die diese dann erben: //in der contentList.jade extends layout append content //mache List-Sachen
//in der contentForm.jade extends layout append content //mache den Form-Quatsch
..
nur dann muss ich ja beim aufruf von res.render(file,content); irgendwie flexibel sein oder am liebsten würde ich hier sogar mehrer Dateien zusammen führen (z.B. navigation, footer).
Ich denke ich kann die Variable file je nach Route unterschiedlich belegen, aber macht man das so? Macht das Sinn?
Oder gibt es eine möglichkeit zu buffern, dass ich am "Ende" mir mehrere Stücke zusammenbaue un in ein Haupt-Template baue?
Noch eine andere Frage, was indirekt noch mit den Templates zu tun hat: Es gibt Content für die HTML-Seite die ich während der Laufzeit eines Request verändern will, sozusagen global zur Verfügung haben haben will. Dazu zählen z.B. die eingebundenen css-Files (werde wohl stylus verwenden) bzw js-Scripte. Da würde ich gerne je nach Route variabel sein. Dass ich diese Dateien als static markieren muss ist klar, aber kann ich mir ein Array per app.params() oder app.set() basteln wo ich mir die Sachen hinterlege und dann mit ins Template schubse? Oder wie geht man hier vor?