2012-06-27 9 views
8

Mam 3 pliki: layoutA.jade, layoutB.jade i index.jade. W jaki sposób można programowo ustawić, który układ rozszerzy się w pliku index.jade?W jaki sposób dynamicznie ustawiono układ szablonu Jade w programie Node.js/Express 3.0?

Próbowałem przy użyciu:

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

z:

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

nie wydaje przesłonić coś jawnie ustawione w pliku index.jade. Pominięcie przedłużenia linii wewnątrz pliku index.jade również nie działa.

Odpowiedz

6

Powiedzmy pliki jade znajdują się w następującym katalogu:

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

dodać ustawienia układu w odpowiedniej kolejności, a następnie określ folder ciami root:

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

Upewnij się określić poprawny folder (w tym przypadku "widoki"). Upewnij się również, aby określić prawidłowy układ domyślny. Sprawdź, czy działa to ze stroną testową, zanim zanurkujesz głębiej.

Raz, że działa można Domyślny układ tak:

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

Popraw mnie jeśli się mylę, ale to rozwiązanie nie jest już w porządku, prawda? –

+0

@AugustinRiedinger Jak podaje tytuł pytania, powinien być poprawny dla Express 3.0. Czy to nie działa w tej wersji? – JimmyBoh

+0

Nie sądzę, aby wystąpił problem ze zgodnością w odniesieniu do 'express 3' vs current' express 4.x', ale po stronie jade: Używanie 'pug 2.0' pozwala stwierdzić, że parametr' view options' nie jest używany już (lub będę szczęśliwy, że się mylę). Przeszedłem wiele wyszukiwań, aby osiągnąć dynamiczny układ w jade/mopsie bez powodzenia, więc ta odpowiedź była dla mnie frustrująca, mimo że nie była zła. –

Powiązane problemy