2012-07-05 19 views
26

Dobra mam przeważnie statyczną stronę główną, ale chciałem mieć częściowe widoki, które dla nawigacji, stopki itp. Używam EJS i wygląda to tak:Część ejs "nie jest zdefiniowana"

mój kontroler: home.js

// Dependencies 
var express = require('express'); 


    module.exports = { 
     get: function(req, res) { 
      app.set('view engine', 'ejs'); 
      var model = { 
      layout:'home', 
        }; 


      res.render('home'); 


     } 
    }; 

Mój katalog poglądy ma NAV, Dom i stopkę wszystkie .ejs

Następnie rzeczywisty plik html pozbawione tekstu wyglądałby następująco.

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8" > 
<title>Tom Jones</title> 

<!-- CSS --> 
<link rel="stylesheet" href="/css/home.css" type="text/css" media="screen" > 

</head> 
<body> 

<%- partial('nav') %> 

<!--content part --> 
<div id="showcontainer"> 
     <section> 

     </section> 
</div> 

<div id="maincontainer"> 
     <section> 

     </section> 
</div> 

</body> 
</html> 

Problem Gdy kiedykolwiek przetestować go uruchomić w błąd częściowego nie jest zdefiniowana. Próbowałem wymagać ejs, ale bez powodzenia.

Odpowiedz

4

Częściowa została usunięta w 3.x. Teraz zależy od silnika szablonowego, który zapewnia częściowe.

+1

Do ejs lub ekspresowe – lostAstronaut

+0

ejs. Istnieje projekt pomostowy dla pliku express.js i wielu silników szablonowych, który nazywa się konsolidate.js i można go znaleźć tutaj: https://github.com/visionmedia/consolidate.js – Pickels

+6

Jak na ironię, jest to tylko "częściowe" odpowiedź. Czy możesz podać wyjaśnienie, jak sprawić, aby Partials działał w Express 3.x i EJS przy użyciu pliku konsolidate.js? – Joshua

53

Jak powiedział @Pickels, Partial został usunięty w 3.x. Jednak najnowsza wersja EJS zapewnia mechanizm za tym „partials”, zwany „obejmują”:

https://github.com/visionmedia/ejs#includes

Zawiera są względem szablonu z oświadczeniem obejmują, na przykład, jeśli masz " ./views/users.ejs "i" ./views/user/show.ejs "używałbyś <% include user/show%>. Dołączone pliki są dosłownie dołączane do szablonu, po kompilacji nie jest wykonywane żadne IO, dlatego zmienne lokalne są dostępne dla tych szablonów.

Następujące będzie działać jako zamiennik dla starej funkcji partial(). Będziesz musiał dokonywać poprawek gdzie indziej, aby obsługiwać Express 3.x całkowicie, ale w większości przypadków to działa dobrze (lepiej - mniej kodu i więcej wydajności).

<% include nav.ejs %> <!-- replaces your old <%- partial('nav') %> --> 
+3

Rzeczą, na którą należy uważać, jest podanie nazwy pliku: http://stackoverflow.com/a/13537052/131809 – Alex

+0

Również sekcja dotycząca layoutu na stronie ejsa ma przykład użycia https: // github. com/visionmedia/ejs/blob/master/Readme.md # layouts do obsługi czegoś, czego szukasz. –

+0

Każdy pomysł, jak dołączyć części do katalogu nadrzędnego? Użycie '../ path/partial' nie działa w ogóle ... – Vadorequest

Powiązane problemy