Standardwerte in Jade-Templates

Folgendes Problem:
Ich habe ein Jade-Layout und ein Jade-Template. Ich möchte den Titel-Tag beim Rendern der Seite bestimmen. Das Layout-Template sah so aus (Funktioniert nicht!):

!!! strict
html
  head
    title #{title}
  body
    #kopfzeile Guten Tag!
    #inhalt!= body

Dies funktionierte auch, wenn man es wie folgt aus Express aufrief:

res.render('template.jade', {title: "Mein Titel"});

Nun wollte ich an manchen Stellen das Attribut einfach nicht verwenden und bekam eine Fehlermeldung.
title is not defined
Ich hab mich dann im Git-Repository umgesehen und diesen Eintrag gefunden.
Die Lösung ist, statt direkt auf die Eigenschaft zuzugreifen das locals-Objekt zu benutzen:

!!! strict
html
  head
    title= (locals.title || "Standardtitel")
  body
    #kopfzeile Guten Tag!
    #inhalt!= body

Dies kann nun so aufgerufen werden:

res.render('template.jade');

Oder mit gesetztem Titel:

res.render('template.jade', {locals:{title:"Mein Titel"}});
Advertisements

Nur ein kurzer Post zu Node.js

Mein aktuelles Projekt benutzt nun Node.js mit MongoDB. Mongoose bietet mir dabei den Datenzugriff auf die MongoDB, was ganz gut funktioniert. Außerdem habe ich mich nun doch entschlossen neben Express.js auch die Template Engine Jade einzusetzen. Ich finde die Idee, solch eine hübsche Syntax zu haben, durch die dann HTML erstellt wird sehr gut! Bis auf eine Kleinigkeit funktioniert es auch sehr gut. Wenn man eine Variable im Template anzeigt, diese aber nicht setzt, dann wird ein Fehler ausgelöst und die Seite wird nicht angezeigt. Hier wäre es schöner, wenn man stattdessen nichts anzeigen könnte, da manche Information nicht mitkommt, weil sie nicht benötigt wird. Naja, ich werde sehen, ob sich dafür eine hübsche Lösung findet.

jQuery und der kleine Fallstrick

Ich arbeite seit kurzem mit jQuery und finde es sehr gut! Eine gute Javascript-Bibliothek, die einem sehr Viel Arbeit abnimmt.
Aber ich habe auch schon den ersten Fallstrick entdeckt.
Wenn ich ein DOM-Element mit der ID „sortMe“ habe und dieses mit $(„sortMe“) suche und dann Methoden darauf ausführe, funktioniert dies nicht! Es gibt aber auch keinen Fehler, oder ähnliches. Es klappt einfach nicht.
Hat mich etwas Zeit gekostet, herauszufinden, dass ich keinen Klotz davor gemacht habe. Richtig muss es heißen $(„#sortMe“)
Aber jetzt bin ich schlauer! Den Klotz nicht vergessen und nach einem Plugin suchen, dass hier zumindest während der Entwicklung Fehler auswirft!

Aptana Studio 3 zeigt (Pseudo-)Fehler bei statischen Dateien in Node.js

Ich nutze nun Aptana Studio 3 um unter Ubuntu für Node.js zu programmieren. Es gefällt mir gut, da es Autovervollständigung unterstützt. Nun hatte ich einen kleinen Test geschrieben, um statische Dateien, wie Bilder, mit Express verfügbar zu machen und musste feststellen, dass Aptana diesen als Falsch anmeckerte, obwohl er läuft.
Es geht um die folgende Zeile:

app.use(express.static(__dirname + '/public'));

Das Problem ist das Wort static. Dies gehört zu den reservierten Wörtern in Javascript und wurde trotzdem von den Entwicklern genutzt. Da mich das Anmeckern des Fehlers nervte, habe ich die Array-Schreibweise angewendet:

app.use(express['static'](__dirname + '/public'));

Nun meckert er nicht mehr und es funktioniert.