使用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