2011-08-08 48 views
0

我目前正在使用快遞創建我的新網站。該頁面分爲不同的「部分」(例如博客,有關我的項目的信息等)。 我希望我的內容旁邊有一個「sidebare」,它們對於每個部分都是不同的。例如,在「博客」 - 部分ID喜歡有我的標籤或分類列表,並在項目部分應該有一個所有項目的列表。內容取決於該部分,對於本節的每個「子部分」都是相同的。在哪裏「構建」側邊欄的內容?

一個解決方案是創建一個函數,該函數創建邊欄內容並在處理路徑的每個函數中調用此函數。但我不喜歡這個解決方案,因爲它似乎不是「正確的」...

有沒有人有一個很好的解決方案呢?

+0

我不明白這個問題。通常情況下,如果需要動態生成它,通常會將邊欄放在HTML模板中 - 或者是一些模板引擎。 – Halcyon

+0

「問題」是創建sidebares內容的功能(當然)是異步的,因爲我必須從數據庫中獲取數據。所以一個簡單的「視圖助手」不能做到這一點。 – masch

+0

「當然」?我認爲你有太多隱含的假設。我不明白你所描述的情況。買一隻橡皮鴨。向你解釋你試圖做的事情,鴨子會明白。然後修改你的解決方案 - http://en.wikipedia.org/wiki/Rubber_duck_debugging – Halcyon

回答

1

如果我正確理解你的問題,你想知道如何使用相同的整體模板渲染多個'節',是嗎?每個部分可能會有所不同,具體取決於頁面上的內容和主要URL。

我可以建議兩種方式: 1)恕我直言,正確的方法 - 定義一個基本模板(比如說,如果你使用的是jade/express的index.jade),並且你會創建一個主頁(/)和一個主頁博客頁面(/博客)使用:

# Home Page 
app.get '/', (req, res) -> 
    # Do some simple DB transactions, etc, and get the main area content. 
    res.render 'index.jade', { json: json } 

# Blog Page 
app.get '/blog/:id', (req, res) -> 
    blog.grabPost req.params.id, (json) -> # Grab content of the blog post from the DB 
    res.render 'index.jade', { json: json } 

接下來,創建幾個「部分」的URL爲內容的其餘部分:

# Sidebar Partial 
app.get '/sidebar/:page/:id', (req, res) -> 
    sidebar.grabContent req.params.id, (json) -> 
    res.render '{#req.params.page}.jade', { json: json } 

你會則呼籲頁面加載部分客戶端通過JQuery像這樣:

$ -> 
    $('.sidebar').load '/sidebar/blog/365' + id, (response, status, xhr) -> 

2)使用Express'視圖partials',我不太熟悉。文檔可以在這裏找到:http://expressjs.com/guide.html#view-partials

從描述中:「Express視圖系統內置支持部分和集合,這是代表文檔片段的」小「視圖,例如,而不是在視圖中迭代顯示評論,我們可以使用部分收集:「

+0

嘿,謝謝你的回答!部分問題(據我瞭解)是你不能使用異步。函數來生成其內容。 AJAX解決方案是可能的,但..我不知道我是否喜歡它,因爲目前我的網站不需要客戶端JavaScript的工作。我不喜歡需要javascript的「簡單」網站。 – masch

+0

嗯我使用異步函數在我的應用程序書籤中生成我的偏見,請查看:https://github.com/bdickson/booklist/blob/master/app.coffee#L75 –