我期待正確地考慮我的觀點,不會產生太多重複。我正在使用Play框架,我想分解的元素是基本的常見元素 - 頁眉,頁腳,導航元素。如何在Play框架中的視圖中重用可重用組件?
這種保理的標準模式是什麼?當我閱讀視圖繼承功能時,他們聽起來好像不允許重用組件。
我正在使用2.0版的Play。
說,例如,我有多個頁面的常見佈局,我期待有熱插拔位 - 比如,核心內容位和頁腳,在不同的網頁,我展示有不同的頁腳和內容組合。
我期待正確地考慮我的觀點,不會產生太多重複。我正在使用Play框架,我想分解的元素是基本的常見元素 - 頁眉,頁腳,導航元素。如何在Play框架中的視圖中重用可重用組件?
這種保理的標準模式是什麼?當我閱讀視圖繼承功能時,他們聽起來好像不允許重用組件。
我正在使用2.0版的Play。
說,例如,我有多個頁面的常見佈局,我期待有熱插拔位 - 比如,核心內容位和頁腳,在不同的網頁,我展示有不同的頁腳和內容組合。
您應該使用layouts
和tags
的組合,如in the documentation所述。
Layout
渦卷當前視圖,所以它是用於開始和結束HTML結構,添加腳本到HTML文檔的head
部,以及將典型元素最好的地方 - 例如與標誌穩定頁眉,頁腳與著作權等如果您在所有頁面上都具有相同的主導航,您也可以將它放在佈局中,然後可以在佈局視圖中添加參數,以便輕鬆更改活動項目的CSS類。請注意,如果您有兩個不同版本的主導航(例如,一個用於普通用戶,第二個用於管理員),則可以創建2個不同的佈局,或者使用一個佈局並顯示兩個不同的版本,具體取決於某些param從最初的觀點傳遞過來。
Tags
用於將代碼注入當前視圖(因此它們與佈局相反)。它們是沒有佈局的常見視圖,也是帶有參數的函數。它們主要用於放置每個頁面上正在更改的東西,甚至要求 - 例如通知框(來自文檔:success
,error
等)。此外,它們對子導航也很有用,尤其是在主導航中每個「分支」發生更改時都是如此,有可能的是,在某些頁面上根本不應該顯示它。
,您還可以在layouts
(可能,反之亦然)使用tags
所以你可以看到,有很多可能性:)
注:palako的示例說明了它相當不錯,但它是典型的播放1 .x模板引擎,用於Play 2.x檢查,參考documentation和/或與Play源一起交付的示例應用程序。
有兩件事我可以想到。第一個是當你有一個頁面的骨架,並且希望您的每一個意見,以填補在骨架的組成部分之一,例如,這將是您的骨架:
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>
不知道從這樣一個簡單的解釋是明確的,當使用哪一個,我認爲一旦你得到不同的結果是非常自然的,我一直都在使用它們。
這些樣本適用於Play 1.x模板系統。 – biesior
啊,是的。我還沒有使用過2.x。這部分是否也不向後兼容? – palako
是的,它也不兼容,Play 2.0提供了自己的基於Scala的模板引擎,這是完全鍵入的,並且可能比Play 1中編譯的Play 1更快。 – biesior