使用Express.js,我想将Jade模板的局部视图渲染为变量。在Express.js中,如何渲染不带“响应”对象的Jade局部视图?
通常情况下,你直接呈现局部视图响应对象:
response.partial('templatePath', {a:1, b:2, c:3})
然而,因为我是一个Socket.io服务器事件里面,我没有“反应”的对象。
是否有一种优雅的方式来使用响应对象将Jade局部视图渲染为变量而不使用?
使用Express.js,我想将Jade模板的局部视图渲染为变量。在Express.js中,如何渲染不带“响应”对象的Jade局部视图?
通常情况下,你直接呈现局部视图响应对象:
response.partial('templatePath', {a:1, b:2, c:3})
然而,因为我是一个Socket.io服务器事件里面,我没有“反应”的对象。
是否有一种优雅的方式来使用响应对象将Jade局部视图渲染为变量而不使用?
您可以手动编译Jade模板。
var jade = require('jade');
var template = require('fs').readFileSync(pathToTemplate, 'utf8');
var jadeFn = jade.compile(template, { filename: pathToTemplate, pretty: true });
var renderedTemplate = jadeFn({data: 1, hello: 'world'});
这里的直接解决这个问题的快车3个用户(其现在应该被广为流传):
res.partial()已被删除,但你可以随时使用app.render使用回调函数,如果响应对象不是当前上下文的一部分像在Liors情况下():
app.render('templatePath', {
a: 1,
b: 2,
c: 3
},function(err,html) {
console.log('html',html);
// your handling of the rendered html output goes here
});
由于app.render()是应用程序明确objec的函数它自然意识到已配置的模板引擎和其他设置。它的行为方式与app.get()或其他快速请求事件上的特定res.render()行为相同。
参见:
完美的作品,谢谢!我使用以下命令来解析pathToTemplate: var pathToTemplate = require('path')。resolve(__ dirname,'../views')+ templateName +'.jade'; – 2011-12-27 13:25:58
非常感谢!我有这个问题试图适应部分,你的答案是谷歌的第一个结果。你摇滚的男人! – 2012-06-30 00:21:10
这个答案是正确的**但如果你想使用缓存机制**检查[matthias响应](http://stackoverflow.com/questions/8644580/in-express-js-how-can-i-render-a -jade-partial-view-without-a-response-object#answer-12725703) – fider 2014-01-21 10:14:11