我有一个Play Scala 2.5应用程序。我想知道如何从scala代码返回另一个Twirl模板中的Twirl模板(如果可能的话)。
示例:我有几个与html输入元素对应的Twirl模板。输入文本的一个模板,输入复选框的另一个模板,等等。 我有一个主模板,在内部我从Scala对象或类调用一个辅助方法,并根据某些条件我返回所需输入元素的Twirl模板。
答案 0 :(得分:1)
在这个答案中,我想你的模板具有相同的输入参数和输出类型(HTML)。 Play docs表示模板已编译为普通的Scala函数。
例如,假设您有两个模板, template1 和 template2 ,它们都有输入参数a: String
。 main 模板应该使用这两者中的任何一个,因此它的参数为template: String => HtmlFormat.Appendable
。
<强>模板1 强>:
@(a: String)
@{ a + " world!" }
<强>模板2 强>:
@(a: String)
@{ a + " Stackoverflow!" }
主要强>:
@(template: String => HtmlFormat.Appendable)
@template("Hello")
如果我们传递 template1 ,我们得到了#Hello; Hello world!&#34;,如果我们传递 template2 ,我们得到&#34; Hello Stackoverflow!& #34;
现在,您可以定义方法 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)