2012-11-15 54 views
1

我想了解如何爲一個爲例在userbar我玉佈局設置添加一個userbar actualy我有我的layout.jade:如何在玉模板

doctype 5 
html 
head 
    title= title 
    link(rel='stylesheet', href='/stylesheets/style.css') 
body 
    include userbar 
    block content 

在我包括我只有我當前頁面上的可變環境。

別咬我,我要在Symfony2中franmwork個例:如果你在你的佈局有這樣的代碼d 用於爲例

{% render "AcmeBundle:Acme:menu" %} 

它將調用AcmeController和menuAction()方法不管當前頁面

我想有相同的系統:在我玉頁面渲染會調用爲例一個requestHandler

exports.userbar = function(req, res){ 
    var user = 'ant'; 
    res.render('userbar', { user: user }) 
}; 

現在這會使我userbar :) 但我不知道怎麼跟玉

做,如果我不明白問我問題

謝謝:)

回答

3

在你的情況,您也必須在每個頁面中添加{% render "AcmeBundle:Acme:menu" %}。明示,我認爲你更容易做同樣的事情。你在這裏有不同的選擇。第一個選項是在特定請求處理程序中使用user中間件,如

添加一個簡單地查找用戶並設置app.locals屬性的快速中間件。所有的玉文件都可以看到app.locals。例如,這個簡單的中間件應該是足夠

var user = function(req, res, next) 
{ 
    var user = db.find(...); 
    app.locals({user: user}); 
    next(); // Do not render the page here, call the next() 
} 

然後在你的路由,使用var user如下:

app.get('/your_desired_url', user, function(req, res) { 
    res.render('your_required_jade_file') 
}); 

你可以在任何你想要的請求處理程序使用此方法;例如,

app.get('/your_desired_url2', user, function(req, res) { 
    res.render('your_required_jade_file') 
}); 

app.get('/your_desired_url2', user, function(req, res) { 
    res.render('your_required_jade_file') 
}); 

在第二個選項,你可以添加此中間件作爲通用的中間件,像

app.use(function(req, res, next) { 
    var user = db.find(...); 
    if(user) app.locals({user: user}); 
    else app.locals({user: null}); 

    next(); // Do not render the page here, call the next() 
}); 

在第二種情況下,所有的請求都通過此功能通過,所以在.jade文件,user varabile始終可用。

在你.jade結構,可以使用以下

layout.jade

!!! 5 
html 
    head 
    body 
    include userbar 
    block content 

和例如dashboard.jade

extends ./layout 
block content 
    // Your dashboard specific content goes here.. 

我希望這能解決你的問題。

+0

好吧,但在這種情況下,我必須在每個頁面添加用戶我想獲取我的用戶欄 – Ajouve

+0

好的,我更新了更詳細的答案,如果它解決了您的問題,請不要忘記設置爲正確。 –

+0

不,我只是在我的佈局中添加了{%render「AcmeBundle:Acme:menu」%},我想在我的佈局中做同樣的事情 – Ajouve