2016-07-21 2 views
0

У меня есть приложение Play Scala 2.5. Я хотел бы знать, как вернуть шаблон Twirl (если возможно) внутри другого шаблона Twirl из scala-кода.Call Twirl template in scala code

Пример: У меня есть несколько шаблонов Twirl, соответствующих элементу ввода html. Один шаблон для ввода текста, другой для ввода флажок и т. Д. У меня есть основной шаблон и внутри я вызываю вспомогательный метод из объекта или класса Scala и на основании некоторого условия возвращаю шаблон Twirl для требуемого элемента ввода.

+0

Вы имеете в виду одинаковые параметры ввода или совершенно разные шаблоны? –

ответ

1

В этом ответе я предполагаю, что ваши шаблоны имеют одинаковые входные параметры и тип вывода (HTML). Play docs говорят, что шаблоны скомпилированы для обычных функций Scala.

Например, предположим, что у вас есть два шаблона, template1 и template2, и они оба имеют входной параметр a: String. Основной шаблон должен использовать любой из этих двух, поэтому он имеет параметр template: String => HtmlFormat.Appendable.

template1:

@(a: String) 
@{ a + " world!" } 

template2:

@(a: String) 
@{ a + " Stackoverflow!" } 

главный:

@(template: String => HtmlFormat.Appendable) 
@template("Hello") 

Если мы проходим template1 мы получаем «Hello world!», И если мы пройдем template2, мы получим «Hello Stackoverflow!».

Теперь вы можете определить метод getTemplate, чтобы получить нужный шаблон:

val t1 = views.html.template1.apply _ 
val t2 = views.html.template2.apply _ 

def getTemplate(param: Int) = if(param == 1) t1 else t2 

и, наконец, Applicationконтроллер метод:

def showTemplate(param: Int) = Action { 
    val template = getTemplate(param) 
    Ok(views.html.mainTemplate(template)) 
} 

и маршрут, конечно :

GET  /template/:id    controllers.Application.showTemplate(id: Int) 
+0

Благодарим вас за хороший ответ. Для вашего вопроса о параметрах да, мои шаблоны Twirl для входных элементов имеют разные параметры. – jerome

+0

Здесь нет простых моментов, хех ... Полагаю, вам нужно будет переместить свою логику внутри самого шаблона или что-то в этом роде ... –