2011-12-06 16 views
18

Mam witrynę w pliku node.js; utworzyć stronę, na przykład mypage Zauważyłem, że muszę utworzyć zarówno pliki layout.jade, jak i mypage.jade. Jeśli wstawię kod do mypage.jade, to nie zostanie wyświetlony, więc najpierw muszę wypełnić layout.jade z układem strony.jade szablon silnika, jak korzystać z layout.jade?

Moje pytanie brzmi, w jaki sposób mogę odwołać się do layout.jade, że chciałbym załadować zawartość mypage.jade do określonego kontenera, na przykład? Czy mogę mieć różne strony o tym samym układzie? Jak mogę to zrobić?

Dzięki

+0

Używasz Expressu w prawo? – alessioalex

+0

Tak, przepraszam, że o tym nie wspomniałem. Używam Express. – Masiar

Odpowiedz

30

http://expressjs.com/guide.html#view-rendering

Jeśli nie chcesz korzystać z układów można je wyłączyć globalnie:

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

Jeśli nie rób tego układy są domyślnie włączone i wyrażania szuka standardowego układu w twoim folderze widok_widoku/layout.jade

Możesz określić osobny układ dla każdej trasy:

res.render('page', { layout: 'mylayout.jade' }); 
// you can omit .jade if you set the view engine to jade 

Oto jak plik układ może być:

doctype html 
html(lang="en") 
    head 
    title Testing 123 
    body 
    div!= body 

Zauważ, że ciało zostanie pobrana z "mypage.jade".

Edit:

Oto prawdziwy przykład w aplikacji:

Plik aplikacji (zawierający trasy i configs):
https://github.com/alexyoung/nodepad/blob/master/app.js

Plik układ:
https://github.com/alexyoung/nodepad/blob/master/views/layout.jade

+0

W tej chwili to, co robię, to 'res.render (__ dirname + '/ pages/index.jade', {user: usr});', więc to, co mówisz, to przekazanie obiektowi, który otacza mojego użytkownika również dodaj pole o nazwie layout: i podaj mój layout? Ponieważ teraz już używa layoutu, nawet jeśli go nie sprecyzowałem (nie ładuje 'index.jade', ale układ. Ponadto, div = body, co zajmie? Treść danego pliku' .jade'? – Masiar

+0

Jak napisałem w mojej wiadomości, układy są domyślnie włączone, podobnie jak res.render ('index.jade', {user: usr, layout: false}), jeśli nie chcesz, aby układ był określony dla danej strony, w przeciwnym razie podać wartość dla layoutu. Body = zawartość pliku .jade tak – alessioalex

+0

Wielkie dzięki, gdzie dokładnie to przeczytałeś? Przeszukałem witrynę jade, ale nie mogłem znaleźć czegoś użytecznego – Masiar

4

Trochę za późno rty ale ja starałem się znaleźć odpowiedź początkowo ... W layout.jade

doctype html 
html(lang="en") 
    head 
    body 
     h1 Hello World 
     block myblock 

Następnie w index.jade

extends layout 
    block myblock 
     p Jade is cool 

odda

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<body> 
    <h1>Hello World</h1> 
    <p>Jade is cool</p> 
</body> 
</html> 
+1

co robi! = Body? Potrzebujesz więcej informacji tutaj. – qodeninja

+0

@qodeninja - Z dokumentacji: "Unesco buforowany kod zaczyna się od! = I generuje wynik oceny wyrażenia JavaScript w szablonie.Nie robi to żadnego ucieczki, więc nie jest bezpieczne dla danych wprowadzanych przez użytkownika" –

1

wiem podejście, które dał mi najlepsze rezultaty, nawet przy kątowe (zastąpił kątowej trasie/NG-view)

Przede wszystkim konieczne będzie zainstalowanie układu ekspresowego:

npm install --save express-layout 

Następnie express wyszuka plik layout.jade w środku r wyświetleń/folder. Tak, wewnątrz którego można użyć:

views/layout.jade

html 
    head 
    meta(charset='utf-8') 
    title= title 
    body 
    div!= body 

widoki/home.jade

h1 Welcome aboard, matey! 

server.js

var express = require('express'), 
    layout = require('express-layout'); 

var app = express(); 

app.get('/', function(req, res) { 
    res.render('home', { 
    title: 'Welcome!' 
}); 

Domyślnie wyrazić wyszuka layout.jade w swoim poglądów/ folderu, ale można zmienić domyślną, używając (tak, to nie ma potrzeby pisać .jade rozszerzenie):

app.set('layout', 'default'); 

Po tym express użyje views/default.jade jako domyślnego układu.

Także jeśli chcesz użyć innego układu w danej strony, można użyć:

app.get('/', function(req, res) { 
    res.render('home', { 
    layout: 'login', 
    title: 'Welcome!' 
}); 

Tutaj wyrazić odda login.jade jak układ.

Przypuszczam, że używasz Jade jako domyślnego mechanizmu wyświetlania i nie zmieniaj domyślnego folderu dla widoków.

Oto express-layout doc.

+0

Ładne podejście ... To pracował dla mnie –

Powiązane problemy