2013-12-09 94 views
0

我有幾個關於模板的問題。我想我不明白他們是如何工作的。 比方說,我有一個網站,其中包含左側的導航,中間的顯示和帶額外導航的標題。 所以,我有以下模板:渲染單個模板(播放框架)

  • main.scala.html
  • navigation.scala.html
  • header.scala.html
  • display.scala.html

主.scala.html包含該網站的一般結構。它獲取導航,標題和顯示作爲參數。所以主要的第一行是:

@(navigation: html)(header: html)(display: html) 

對嗎?

如果我想查看整個頁面,我將在我的控制器中調用ok(main.render())

但是,如何更改我的網站上的導航?當我創建一個新模板時,我們將其稱爲newNavigation.scala.html,並在我的控制器中呼叫ok(newNavigation.render()),我會遇到問題,我只會將newNavigation模板傳遞給主模板,而主模板會錯過標題和顯示。

導航模板以及頭和顯示器的樣子:

@main{ 
... 
} 

我如何可以加載在同一時間不同的顯示和導航?

我很抱歉我的英語,我希望有人能幫助我,謝謝。

+2

這些Play模板?標記對於確保正確的人員看到您的問題非常重要。 – Dylan

+0

是的,很抱歉 – user3083415

回答

0

你需要用另一種方式來包裝你的模板。您的main.scala.html是一個很好的起點。但你寧願要一個像

@(navigation: html, header: html)(display: html) 

你會明白爲什麼這將在一秒鐘內更好地工作。現在您需要定義導航。但不是將導航包裹到主體中,而是自己定義導航:

@() 
<ul> <li> ... </li> </ul> 

對標頭做同樣的操作。在此之後,你可以創建一個index.scala.html這是打算把所有的拼在一起:

@(someName: String) 
@main(navigation(), header()){ 
    <h1>Hello @someName</h1> 
} 

在不同的模板,你可以使用不同的導航欄。讓我們創建一個goodby.scala.html:

@(someName: String) 
@main(newNavigation(), header()){ 
    <h1>Goodby @someName</h1> 
} 

您也可以使導航的動態,並將其傳遞到模板:

@(someName: String, customNavigation: html) 
@main(customNavigation(), header()){ 
    <h1>...</h1> 
} 

重要的一點要記住:定義自己的片段。定義「骨架」(main.scala.html)並使用另一個模板將所有部分放在一起。

+0

非常感謝!我會試試:) – user3083415

+0

嗨,我試着用你的方式。但現在我得到以下編譯錯誤:「type mismatch; found:views.html.navigation.type required:play.api.templates.Html」。我的主要看起來像「@(navigation:Html,header:Html)(display:Html)some code ...」和我的索引看起來像@main(navigation,header){

你好

} index.render()方法。 – user3083415

+0

好吧,我的壞。您需要將模板作爲函數調用。嘗試使用'@main(navigation(),header()){...}'代替 。 – tmbo