2012-07-05 12 views
26

Ok, ho una homepage prevalentemente statica ma volevo avere viste parziali che per la navigazione, il piè di pagina ect. Sto usando ejs e sembra che questo:ejs 'partial non è definito'

mio controller: 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'); 


     } 
    }; 

mie opinioni directory è NAV, a casa e piè di pagina tutti .ejs

Poi il file html effettivo Stripped di testo sembrerebbe il seguente.

<!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> 

Il problema Quando mai ho provarlo corro nell'errore parziale non è definito. Ho provato a richiedere ejs ma nessun successo.

risposta

4

parziale è stato rimosso in 3.x. Ora è compito del motore dei template fornire i partial.

+1

Fino a ejs o express – lostAstronaut

+0

ejs. C'è un progetto bridge per express.js e molti motori di template che si chiama consolidate.js e può essere trovato qui: https://github.com/visionmedia/consolidate.js – Pickels

+6

Ironia della sorte, questo è solo un 'parziale' risposta. Puoi fornire una spiegazione su come far funzionare Partials in express 3.xe EJS usando consolidate.js? – Joshua

53

Come indicato da @Pickels, Parziale è stato rimosso in 3.x. Tuttavia, la versione più recente di EJS fornisce un meccanismo per cui "parziali", chiamati "includere":

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

Include sono relative al modello con l'istruzione include, ad esempio, se si dispone di " ./views/users.ejs "e" ./views/user/show.ejs "si usa <% include utente/mostra%>. I file inclusi sono letteralmente inclusi nel modello, nessun IO viene eseguito dopo la compilazione, quindi le variabili locali sono disponibili per questi modelli inclusi.

Quanto segue funzionerà come una sostituzione per la vecchia funzione partial(). Dovrai apportare modifiche in qualche altro modo per supportare Express 3.x completamente, ma per la maggior parte questo sembra funzionare bene (meglio in realtà - meno codice e più performante).

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

A cosa fare attenzione qui è necessario includere il nome del file: http://stackoverflow.com/a/13537052/131809 – Alex

+0

Inoltre, la sezione di layout sul sito di ejs ha un esempio di utilizzo di include https: // github. i formati com/visionmedia/ejs/blob/master/Readme.md # per supportare qualcosa di simile a quello che stai cercando. –

+0

Qualche idea su come includere un partial in una directory genitore? L'uso di '../ path/partial' non funziona affatto ... – Vadorequest