2015-05-26 16 views
8

Jeśli używam Kierownica jako mojego silnika szablonów z Express 4, wydaje się, że jest tylko opcja, aby określić pojedynczy szablon układu do użycia dla wszystkich widokach:Wiele układów z kierownicą i ExpressJS?

app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'})); 

Co jeśli aplikacja potrzebuje wielokrotnego układy? Co jeśli viewA.hbs używa jednego układu i viewB.hbs potrzebuje innego układu?

Kiedy uczę się nodejs, pochodzę z tła PHP Laravel, gdzie Blade templating engine określasz, który układ będzie używany na górze każdego pliku widoku. Ułatwia przełączanie się między szablonami układu dla dowolnego widoku.

Odpowiedz

28

Powinieneś być w stanie przekazać układ z trasy/kontrolera, gdy wywołasz metodę renderowania.

router.get('/', function(req, res) { 
    res.render('home', {layout: 'viewBLayout.hbs'}); 
}); 

Jestem całkiem pewny jade pozwoli Ci przełączać układy od wewnątrz szablonu, ale nie wiem, czy można to zrobić z kierownicy.

+0

Ah Całkowicie tęskniłem za tym w dokumentach. Dziękuję Ci! –

4

Jeśli używasz express-hbs można określić układ w szablonie z komentarzem jak:

{{!< layout}} 

Alternatywnie, można spróbować exphbs. Obsługuje również komentarze do layoutu i można zagnieżdżać wiele układów. (Zrzeczenie się: napisałem to.)

+1

Dzięki. Pytanie boczne: skąd bierze się tak wiele różnych implementacji kierownic ekspresowych? express-hbs, exphbs, expressHbs, etc? –

+0

Dobrze, że pytasz. Nie sądzę, że mam kwalifikacje, aby odpowiedzieć na to pytanie. Ale z własnego doświadczenia wynika, że ​​aktywna społeczność jest zazwyczaj dobra. :) – gnowoel

+3

Jedynym minusem jest to, że projekt A ma świetny pomysł # 1, a projekt B ma świetny pomysł # 2. Nie można mieć obu, a byłoby lepiej, gdyby ludzie właśnie współpracowali przy jednym projekcie, który ma w sobie obie świetne pomysły. –