2014-01-06 4 views
5

Я не нашел представления о частичных представлениях в Play Framework, аналогичном частичным представлениям Ruby on Rails. Например, если есть layouts/main.scala.html расположение:Частичные виды на игру Есть?

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

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

И есть также layouts/_footer.scala.html «частичный», как я включаю _footer в main? Есть ли что-то подобное в Play?

ответ

16

Я думаю, частичный вид ROR является слишком сложным. Что нужно помнить о игровых шаблонах, так как они по сути являются просто функциями, которые могут быть вызваны непосредственно из кода Scala. А также, игровые шаблоны - это, по сути, Scala-код. Это означает, что игровые шаблоны можно вызывать из других шаблонов воспроизведения. Таким образом, просто создать еще один шаблон под названием footer.scala.html, например:

<footer> 
    Powered by Play Framework 
</footer> 

И затем вызвать его из основного шаблона, как вы могли бы вызвать любую другую функцию Scala:

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

не может быть проще.

+0

как же Play знает, где определяется @footer? –

+5

@Alex В этом случае '@ footer' должен быть определен в пространстве имен' views.html', который автоматически импортируется для шаблонов Play. Если он вместо этого находился в 'app/views/common/footer.scala.html', то вместо этого он был бы' common.footer() '. –

0

Я думаю, что @Vidya хочет сказать, что вы можете сделать что-то вроде этого:

В main.scala.html мы добавим переменную с именем колонтитула типа Html со значением по умолчанию пусто:

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

    <!DOCTYPE html> 

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

А затем на странице, как index.scala.html мы можем сделать что-то вроде:

@(message: String) 

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

@main("Welcome", footer) { 
    the content! 
} 
Смежные вопросы