2011-10-02 19 views

Respuesta

22

La forma más sencilla de hacerlo es pasar una devolución de llamada a res.render, en su ejemplo:

res.render('list.ejs', {posts: posts}, function(err, list){ 
    // 
}); 

Pero si desea procesar las plantillas parciales con el fin de incluirlos en otra plantilla que definitivamente debe tener una mira view partials.

+1

Necesito cargar parcial por ajax en la respuesta de json – xrado

+1

, ¿así que funciona? No quiero devolver una página al usuario, quiero incluir la cadena representada en una respuesta res.json(). – chovy

+0

Sí, esto funciona. La devolución de llamada predeterminada, que es lo que habría devuelto la página al usuario, no se invoca cuando transfiere la suya. –

2

soy bastante novato en express.js, de todos modos no estoy seguro de que puede acceder a la cadena rendido de esa manera, aunque si nos fijamos en expreso "vista .js "source en github (here) ves que está aceptando una devolución de llamada como segundo argumento, si eso puede ser de ayuda: puedes acceder a la cadena procesada allí.

De lo contrario, creo que es bastante fácil parchar el código para agregar un método que devuelve la cadena representada sin enviarlo: on line #399 tiene la misma llamada que le da la cadena que está buscando.

1

Esta no fue la pregunta original, pero en base a los comentarios de la OP y otros, parece que el objetivo es hacer una versión parcial vía json (jsonp), que es algo que simplemente tenía que hacer.

Es bastante fácil:

app.get('/header', function (req, res) 
{ 
    res.render('partials/header', { session: req.session, layout: null }, function (err, output) 
    { 
     res.jsonp({ html: output }); 
    });  
}); 

Nota: En mi caso, la cabecera parcial requiere la sesión, y mi biblioteca de plantillas (express-HBS) necesita layout: null para hacer que el parcial sin necesidad de utilizar el diseño predeterminado.

Puede llamarlo desde el código de Javascript en el cliente como cualquier otro punto final de JSONP.

Cuestiones relacionadas