2016-01-26 151 views
0

播放负荷局部模板我有一个这样的斯卡拉模板...斯卡拉通过字符串名称

@() 
import view.html.partials._header 
import view.html.partials._footer 

<!DOCTYPE html> 
<html lang="en"> 

    @_header() 

    /* Body of web page */ 

    @_footer 

</html> 

每一个页面都有相同的页眉和页脚和不同的身体。我不想这样做......

页#1 ...

@() 
import view.html.partials._header 
import view.html.partials._footer 
import view.html.partials._body1 

<!DOCTYPE html> 
<html lang="en"> 
    @_header() 
    @_body1() 
    @_footer 
</html> 

页#2 ...

@() 
import view.html.partials._header 
import view.html.partials._footer 
import view.html.partials._body2 

<!DOCTYPE html> 
<html lang="en"> 
    @_header() 
    @_body2() 
    @_footer 
</html> 

页#3 ...

@() 
import view.html.partials._header 
import view.html.partials._footer 
import view.html.partials._body3 

<!DOCTYPE html> 
<html lang="en"> 
    @_header() 
    @_body3() 
    @_footer 
</html> 

等等

有没有办法传入partia的名字你想作为参数渲染的模板?这个问题的解决方案是什么?

p.s.我没有看到在解决方案...... the play template documentation

回答

-1

作出这样一个交换机或case语句......

@(bodyCase: ClosedEnumType) 

import view.html.partials._header 
import view.html.partials._footer 
import view.html.partials._body1 
import view.html.partials._body2 

<!DOCTYPE html> 
<html lang="en"> 

    @_header() 

    @bodyCase match { 
     case Body1() => { 
      @_body1() 
     } 
     case Body2() => { 
      @_body2() 
     } 
    } 

    @_footer 

</html> 
+0

你会对另一个答案感到高兴。你的方法非常违背框架。 – Ryan

2

而不必所有这些重复的,你可以创建一个main.scala.html文件中使用作为默认布局:

@(title: String)(content: Html) 

@import view.html.partials._header 
@import view.html.partials._footer 

<!DOCTYPE html> 

<html lang="en"> 

    @_header() 

    <body> 

     @content 

     @_footer() 

    </body> 
</html> 

第一行说,正是“这种观点将获得冠军的说法,也HTML块”。从这一点,你可以做到以下几点:

页#1:

@(someParameter: String) 

@main("The title of Page #1") { 

    <h1>Hello, I'm the body of Page #1</h1> 

    <p>As you can see, I'm calling the main view passing 
     a title and a block of HTML</p> 

} 

页#2:

@(someParameter: String, anotherParameter: Long) 

@main("This time Page #2") { 

    <h1>Hello, I'm the body of Page #2</h1> 

    <p>Just like Page #1, I'm passing a title 
     and a block of HTML to the main view.</p> 

} 

这是所有在文档解释,但在另一页:

https://www.playframework.com/documentation/2.0/ScalaTemplateUseCases