2012-07-05 23 views
26

Bien, tengo una página principal principalmente estática, pero quería tener vistas parciales que para navegación, pie de página ect. Estoy usando ejs y se ve así:ejs 'parcial no está definido'

mi controlador: 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'); 


     } 
    }; 

Mi directorio de vistas ha nav, el hogar y el pie de todas las .ejs

A continuación, el archivo html real despojaron del texto se vería como siguiente.

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

El problema cuando cada vez que probarlo me encuentro con el error parcial no está definido. Intenté requerir ejs pero no éxito.

Respuesta

4

Parcial fue eliminado en 3.x. Ahora le corresponde al motor de plantillas proporcionar parciales.

+1

Hasta ejs o express – lostAstronaut

+0

ejs. Existe un proyecto puente para express.js y una gran cantidad de motores de plantillas que se llama consolidate.js y se puede encontrar aquí: https://github.com/visionmedia/consolidate.js – Pickels

+6

Irónicamente, esto es solo un 'parcial' responder. ¿Puede proporcionar una explicación sobre cómo hacer que los Partials funcionen en Express 3.x y EJS usando consolidate.js? – Joshua

53

Como @Pickels dijo, Parcial se eliminó en 3.x. Sin embargo, la versión más reciente de EJS proporciona un mecanismo para la inclusión de "parciales", llamados "incluir":

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

Incluye son relativos a la plantilla con la declaración incluir, por ejemplo, si tiene " ./views/users.ejs "and" ./views/user/show.ejs "usaría <% include user/show%>. Los archivos incluidos se incluyen literalmente en la plantilla, no se realiza IO después de la compilación, por lo que las variables locales están disponibles para estas plantillas incluidas.

Lo siguiente funcionará como un reemplazo para su antigua función partial(). Tendrá que hacer ajustes en otro lugar para admitir Express 3.x por completo, pero en su mayor parte parece funcionar bien (mejor en realidad, menos código y más rendimiento).

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

A tener en cuenta aquí es necesario incluir el nombre del archivo: http://stackoverflow.com/a/13537052/131809 – Alex

+0

Además, la sección de diseño en el sitio ejs tiene un ejemplo de uso que incluye https: // github. com/visionmedia/ejs/blob/master/Readme.md # diseños para admitir algo como lo que está buscando. –

+0

¿Alguna idea de cómo incluir un parcial en un directorio principal? El uso de '../ path/partial' no funciona en absoluto ... – Vadorequest

Cuestiones relacionadas