2012-02-22 80 views
6

當您以快速渲染jade模板時,可以使用'view options', { layout: true }配置您的應用程序,並且呈現的模板將自動插入到佈局模板的body本地。使用佈局呈現玉石模板(無快速)

我試圖實現等效行爲從node.js呈現文件,但沒有明確的框架(我只是建立一個更大的管道的一部分的靜態文件)。

似乎有兩種選擇:

  • 加載兩個主要的模板和佈局,轉變爲功能,首先呈現模板,然後將結果傳遞給佈局功能
  • 使用標準模板繼承和塊結構,但後來我明確使用命名塊

這些是唯一的選擇(這足夠公平,仍然很棒),還是我錯過了一些訣竅?


編輯

這裏是萬一有人第一個選項的粗剪感興趣:

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

我認爲Express 3.0會刪除佈局(至少在默認情況下啓用),以支持使用命名塊的模板繼承,所以這可能有助於您的決定:http://groups.google.com/group/express -js/browse_thread/thread/2ec558510be6d0a4(並且在初始化一個新項目時也可以看到express.js生成的存根:https://github.com/visionmedia/express/blob/master/bin/express)。 – mna 2012-02-22 16:52:48

+0

@PuerkitoBio感謝您的信息;值得指出,但我真正的問題是*是這些做它的唯一方法*?將這些類型的東西放在一起的人通常會在常見用例中嵌入一條短路 - 我並不總是很聰明,無法找到它們! – 2012-02-22 19:08:49

+0

@AJ。感謝該片段。 – 2013-04-22 11:38:50

回答

3

我相信答案是「否」,您不會錯過任何招。您概述的兩個選項對我來說似乎是使用翡翠生成文件的兩種最直接的方法。當然,還有很多非玉石的方法。例如,您可以將內容與plates方法合併,舊版本爲String.replace,或者將版式拆分爲獨立的頁眉廣告頁腳片段文件,並將它們按照頭部,身體,腳部順序連接。

+0

非常感謝 - 我欣賞Flatiron框架的鏈接,並提醒您這些並非新問題。有時很容易讓自己迷失在雲端:) – 2012-02-23 13:39:29