2012-02-22 17 views
6

Al representar plantillas jade en express, puede configurar su aplicación con 'view options', { layout: true } y las plantillas renderizadas se conectarán automáticamente al body local de la plantilla de diseño.Renderizar plantilla de jade con diseño (sin expreso)

Estoy tratando de lograr el comportamiento equivalente de renderizar archivos desde node.js, pero sin el marco expreso (estoy construyendo archivos estáticos como parte de una tubería más grande).

Parece que hay dos opciones:

  • de carga tanto de la plantilla principal y el diseño, se convierten en funciones, hacer que la plantilla primero y luego pasar los resultados a la función de diseño
  • Use la plantilla estándar herencia y estructura de bloques, pero luego estoy usando explícitamente bloques con nombre

¿Son estas las únicas opciones (que, por supuesto, todavía son impresionantes), o me estoy perdiendo algún truco?


Editar

Aquí está un primer corte de la primera opción en caso de que a alguien le interesa:

// Load jade 
var jade = require('jade'); 

// Load actual template text 
var layout = fs.readFileSync('layout-path', 'utf8') 
    tpl = fs.readFileSync('tpl-path', 'utf8'); 

// Compile template rendering function 
layout = jade.compile(layout, { pretty: true, filename: 'layout-path' }); 
tpl = jade.compile(tpl, { pretty: true, filename: 'tpl-path' }); 

// Render jade template, passing in the info 
var output = layout({ body: tpl({ local1: some_var, local2: some_var }) } 

// Write rendered content to file 
fs.writeFileSync('output.html', output); 
+1

Creo que Express 3.0 elimina el diseño (como habilitado por defecto, al menos) a favor de la herencia de plantillas con bloques con nombre, por lo que tal vez esto pueda ayudar en su decisión: http://groups.google.com/group/express -js/browse_thread/thread/2ec558510be6d0a4 (y vea también el stub generado por express.js cuando inicialice un nuevo proyecto: https://github.com/visionmedia/express/blob/master/bin/express). – mna

+0

@PuerkitoBio Gracias por la información; vale la pena señalar, pero mi verdadera pregunta es * ¿son estas las únicas formas de hacerlo *? Las personas que juntan este tipo de cosas a menudo incluyen un cortocircuito para casos de uso común. ¡No siempre soy lo suficientemente inteligente como para encontrarlos! –

+0

@AJ. gracias por el fragmento. –

Respuesta

3

Creo que la respuesta es "no", usted no falta ningún truco. Las dos opciones que describes me parecen las dos formas más directas de usar jade para generar tu archivo. Por supuesto, también hay muchos enfoques que no son de jade. Por ejemplo, podría fusionar los contenidos con el enfoque plates, antiguo String.replace, o dividir su diseño en archivos de fragmento de pie de página de anuncios separados y simplemente concatenarlos en orden de cabeza, cuerpo y pie.

+0

Gracias por eso, y aprecio el vínculo al marco de Flatiron y el recordatorio de que estos no son problemas nuevos. A veces es fácil perderse en las nubes :) –

Cuestiones relacionadas