2012-12-17 25 views
1

我期待正確地考慮我的觀點,不會產生太多重複。我正在使用Play框架,我想分解的元素是基本的常見元素 - 頁眉,頁腳,導航元素。如何在Play框架中的視圖中重用可重用組件?

這種保理的標準模式是什麼?當我閱讀視圖繼承功能時,他們聽起來好像不允許重用組件。

我正在使用2.0版的Play。


說,例如,我有多個頁面的常見佈局,我期待有熱插拔位 - 比如,核心內容位和頁腳,在不同的網頁,我展示有不同的頁腳和內容組合。

回答

1

您應該使用layoutstags的組合,如in the documentation所述。

Layout渦卷當前視圖,所以它是用於開始和結束HTML結構,添加腳本到HTML文檔的head部,以及將典型元素最好的地方 - 例如與標誌穩定頁眉,頁腳與著作權等如果您在所有頁面上都具有相同的主導航,您也可以將它放在佈局中,然後可以在佈局視圖中添加參數,以便輕鬆更改活動項目的CSS類。請注意,如果您有兩個不同版本的主導航(例如,一個用於普通用戶,第二個用於管理員),則可以創建2個不同的佈局,或者使用一個佈局並顯示兩個不同的版本,具體取決於某些param從最初的觀點傳遞過來。

Tags用於代碼注入當前視圖(因此它們與佈局相反)。它們是沒有佈局的常見視圖,也是帶有參數的函數。它們主要用於放置每個頁面上正在更改的東西,甚至要求 - 例如通知框(來自文檔:successerror等)。此外,它們對子導航也很有用,尤其是在主導航中每個「分支」發生更改時都是如此,有可能的是,在某些頁面上根本不應該顯示它。

,您還可以在layouts(可能,反之亦然)使用tags所以你可以看到,有很多可能性:)

注:palako的示例說明了它相當不錯,但它是典型的播放1 .x模板引擎,用於Play 2.x檢查,參考documentation和/或與Play源一起交付的示例應用程序。

1

有兩件事我可以想到。第一個是當你有一個頁面的骨架,並且希望您的每一個意見,以填補在骨架的組成部分之一,例如,這將是您的骨架:

main.html中:

<!DOCTYPE HTML> 
<html> 
    <head> 
     <title>#{get 'title' /}</title> 
    </head> 
    <body> 
     #{doLayout /} 
    </body> 
</html> 

,這將是使用它的頁面之一:

ex1.html:

#{extends 'main.html' /} 
#{set title:'Your title' /} 

<div> 
    Your content 
</div> 

這樣,您不必擔心所有常見的「包裝」代碼,並且您可以使用與在該示例中設置標題相同的方式,也可以將樣式表或JavaScript鏈接添加到標題中。

第二種方法是有一個頁面,其中包括您在不同的模板做的片段,這樣就可以重新使用它們:

example2.html:

<div id="footer"> 
    #{include 'Application/footer.html' /} 
</div> 

footer.html :

<span>This will be rendered inside the "footer" div</span> 

不知道從這樣一個簡單的解釋是明確的,當使用哪一個,我認爲一旦你得到不同的結果是非常自然的,我一直都在使用它們。

+0

這些樣本適用於Play 1.x模板系統。 – biesior

+0

啊,是的。我還沒有使用過2.x。這部分是否也不向後兼容? – palako

+0

是的,它也不兼容,Play 2.0提供了自己的基於Scala的模板引擎,這是完全鍵入的,並且可能比Play 1中編譯的Play 1更快。 – biesior

相關問題