2015-07-28 7 views
0

Возможно ли внедрить шаблоны в другие шаблоны в Play Framework на уровне контроллера?Play Framework 2.3 шаблоны pass/inject в качестве параметров других шаблонов на уровне контроллера

у меня есть:

Ok(views.html.staticpages.index("Your new application is ready.")(views.html.shared.header.unauthenticatedheader())) 

, но он дает мне ошибку:

Тип рассогласование, как ожидается Html, фактический Любой

при попытке пройти views.html.shared.header.unauthenticated to [...]. index, index получает заголовок: Html как второй аргумент, при воспроизведении с прохождением шаблонов в другие шаблоны на уровне шаблона это нормально, чтобы передать тип HTML, но возможно ли преобразовать заголовок.unauthenticated к типу Html?

Это заголовки моих шаблонов:

header.unathenticatedheader:

@()(implicit request: common.request.CanBeAuthenticatedRequest[_]) 

staticpages.index:

@import common.request.CanBeAuthenticatedRequest 

@(title: String = "Welcome to Play")(header: Html)(implicit request: CanBeAuthenticatedRequest[_]) 
+0

Моя локальная версия этого работает нормально - вы можете разместить остальную часть соответствующего кода? –

+0

@SteveChaloner Я добавил заголовки своих шаблонов, дайте мне знать, если вам нужно что-то еще, тип запроса «CanBeAuthenticatedRequest» также передается в шаблон индекса, и когда шаблон индекса не нуждается в параметре заголовка, он работал так Я думаю, что пользовательский WrappedRequest не проблема. – vicaba

ответ

1

У вас есть несколько вариантов здесь. Вы можете передать результат рендеринга, или вы можете пройти в шаблоне и отобразить его внутри шаблона.

Если вам нужно передать параметры в шаблоны, возможно, вам лучше перейти в результат; если вы проходите безпараметрированные шаблоны, это личное предпочтение.

Pass в результате

Шаблон:

@(message: String)(myInsert: Html) 

<div>start: @message</div> 
<div> @myInsert </div> 
<div>end</div> 

Контроллер:

def index = Action { 
    Ok(views.html.index("foo")(views.html.insert())) 
} 

Pass в шаблоне

Шаблон:

@(message: String)(myInsert: Template0[play.twirl.api.HtmlFormat.Appendable]) 

<div>start @message</div> 
<div> @myInsert.render() </div> 
<div>end</div> 

Контроллер:

def index = Action { 
    Ok(views.html.index2("sdf sdf d")(views.html.insert2)) 
} 
+0

Mmmm ... опция «Pass in the result» - это то, что я хочу, но я не вижу, где разница между вашим кодом и моим кодом. – vicaba

+0

. Вы определенно объявляете «неявный запрос» в действии вашего контроллера? –

+0

Да, конечно. Он работает сейчас. Мне пришлось перезапустить активатор. Спасибо за ваш интерес! – vicaba