2012-06-27 4 views
8

Ich habe 3 Dateien: layoutA.jade, layoutB.jade und index.jade. Wie kann ich programmatisch festlegen, welches Layout index.jade erweitert?Wie legen Sie ein Layout für eine Jade-Vorlage dynamisch fest, um es in Node.js/Express 3.0 zu erweitern?

Ich habe versucht, mit:

app.set('view options', { layout: false }); 

mit:

res.render('index', { title: 'Express', layout: 'layoutB' }); // older 2.x way? 

kann ich nichts außer Kraft zu setzen scheinen explizit in der index.jade-Datei festgelegt. Das Weglassen der Verlängerungslinie in der Datei index.jade funktionierte ebenfalls nicht.

Antwort

6

Können sagen, die Jade-Dateien im folgenden Verzeichnis sind:

+ views 
    + shared 
    - layoutA.jade 
    - layoutB.jade 
    + home 
    - index.jade 

die Layout-Einstellungen in der richtigen Reihenfolge hinzufügen, und die Wurzel Ansichten Ordner angeben:

app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.set('view options', { layout: 'shared/layoutA' }); 

Sie die Stellen Sie sicher, angeben richtiger Ordner (in diesem Fall 'Ansichten'). Stellen Sie außerdem sicher, dass Sie ein gültiges Standardlayout angeben. Vergewissern Sie sich, dass dies mit einer Testseite funktioniert, bevor Sie tiefer tauchen.

Sobald das funktioniert, kann man das Standard-Layout wie folgt aus:

if(someImportantVar) { 
    res.render('home/index', { title: 'Different layout!', layout: 'shared/layoutB' }); 
} else { 
    res.render('home/index', { title: 'Default layout!'}); 
} 
+0

mich korrigieren, wenn ich falsch, aber diese Lösung ist nicht mehr richtig, oder? –

+0

@AugustinRiedinger Laut dem Titel der Frage sollte es für Express 3.0 korrekt sein. Funktioniert es nicht in dieser Version? – JimmyBoh

+0

Ich glaube nicht, dass es ein Kompatibilitätsproblem in Bezug auf "Express 3" gegenüber aktuellem 'Express 4.x' geben würde, sondern auf der Jade-Seite: Mit' Pug 2.0' kann ich sagen, dass der Parameter 'view options' nicht verwendet wird mehr (oder ich wäre glücklich, falsch zu liegen). Durch viele Suchen hindurch, um ein dynamisches Layout in Jade/Mops ohne Erfolg zu erreichen, war diese Antwort frustrierend für mich, obwohl ich nicht falsch liege. –