2013-08-05 72 views
5

我正在使用Node.js並進行表達。假設我有一對翡翠文件:在玉石中渲染單塊

template.jade

html 
    body 
    block page-content 

example.jade

extends template 
    block page-content 
     p 
      | Lorem ipsum yadda yadda 

如果我渲染example.jade,我會堵的那款結果標記到template.jade的body標記中,這通常是我想要的。

我的問題是,我試圖使用pushState和歷史API來加載這些文件(以及,明顯不是這些文件),當這樣做時,我想要一個請求,只是返回的內容頁面內容塊本身,沒有完整的HTML文件的其餘部分。有沒有簡單的方法告訴Jade只渲染塊本身,而不是將它嵌入到模板中?


我能想出正在改變它是最好的:

example.jade

extends template 
    block page-content 
    import example-content 

例如,content.jade

p 
    | Lorem ipsum yadda yadda 

,但它似乎的hackish創建像這樣的額外文件。

回答

0

Jade支持可執行代碼。當使用前綴 - (無緩衝)。例如,你可以使用如果statment在主要佈局玉模板:

- if (renderType && renderType == 'page') { 
    doctype 5 
    html 
     head 
     title= title 
     body 
- } 
     block content 

渲染HTML頁面,如:

res.render('index', { title: 'StackOverflow', renderType: 'page' }); 

渲染,如HTML塊:

res.render('index', { title: 'StackOverflow', renderType: 'block' }); 

如果你不不喜歡在所有渲染表達式中使用renderType變量,請使用

res.locals(obj) //*Assign several locals with the given obj. The following are equivalent:* 

並設置所有請求的默認值。 如果你初始化應用程序添加處理程序:

var logger = function(req, res, next) 
{ 
    res.locals({renderType:'page'}); 
    next(); 
}; 

app.use(logger); 
+0

我不認爲有什麼辦法可以有條件地包括「擴展模板」線;把兩個巨人如果塊在我的模板文件內似乎很痛苦。 – Retsam