2014-01-06 2 views
5

Ich habe keine Vorstellung von Teilansichten in Play Framework ähnlich Ruby on Rails Teilansichten gefunden. Zum Beispiel, wenn es layouts/main.scala.html Layout ist:Teilweise Ansichten in Play existieren?

@(title: String)(content: => Html)(implicit flash: Flash) 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>@title</title> 

    </head> 
    <body> 
     <section class="content">@content</section> 
    </body> 
</html> 

Und es gibt auch layouts/_footer.scala.html "teilweise", wie füge ich _footer in main? Gibt es etwas ähnliches in Play?

Antwort

16

Ich denke, RoR die Teilansichten zu komplex sind. Das ist bei Play-Vorlagen zu beachten, da es sich im Wesentlichen nur um Funktionen handelt, die direkt aus Scala-Code aufgerufen werden können. Und auch Play-Vorlagen sind im Wesentlichen Scala-Code. Das bedeutet, dass Play-Vorlagen aus anderen Play-Vorlagen aufgerufen werden können. So erstellen Sie einfach eine andere Vorlage namens footer.scala.html, zB:

<footer> 
    Powered by Play Framework 
</footer> 

Und dann rufen Sie es von Ihrem Haupt-Template, wie jede andere Scala Funktion aufrufen würde:

@(title: String)(content: => Html)(implicit flash: Flash) 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>@title</title> 
    </head> 
    <body> 
     <section class="content">@content</section> 
     @footer() 
    </body> 
</html> 

könnte nicht einfacher sein.

+0

wie weiß es spielen, wo @footer definiert ist? –

+5

@Alex In diesem Fall müsste '@ footer' im Namensraum' views.html' definiert werden, der automatisch in Play-Vorlagen importiert wird. Wenn es stattdessen in "app/views/common/footer.scala.html" gespeichert wäre, wäre es stattdessen "common.footer()". –

0

Ich denke, was @Vidya sagen will ist, dass Sie etwas tun können:

In main.scala.html fügen wir eine Variable mit dem Namen Fußzeile des Typs Html mit einem Standardwert von leer:

@(title: String, footer: Html = Html(""))(content: Html) 

    <!DOCTYPE html> 

    <html> 
     <head> 
      <title>@title</title> 
     </head> 
     <body> 
      @content 
      @footer 
     </body> 
    </html> 

Und dann in einer Seite wie index.scala.html wir so etwas wie tun:

@(message: String) 

@footer = { 
    <footer>the footer!</footer> 
} 

@main("Welcome", footer) { 
    the content! 
}