我有一个 Play Scala 2.5 应用程序。我想知道如何从 scala 代码中返回另一个 Twirl 模板中的 Twirl 模板(如果可能)。
示例:我有几个对应于 html 输入元素的 Twirl 模板。一个用于输入文本的模板,另一个用于输入复选框,依此类推。我有一个主模板,在里面我从 Scala 对象或类中调用一个辅助方法,并根据某些条件返回所需输入元素的 Twirl 模板。
我有一个 Play Scala 2.5 应用程序。我想知道如何从 scala 代码中返回另一个 Twirl 模板中的 Twirl 模板(如果可能)。
示例:我有几个对应于 html 输入元素的 Twirl 模板。一个用于输入文本的模板,另一个用于输入复选框,依此类推。我有一个主模板,在里面我从 Scala 对象或类中调用一个辅助方法,并根据某些条件返回所需输入元素的 Twirl 模板。
在这个答案中,我假设您的模板具有相同的输入参数和输出类型(HTML)。Play 文档说模板被编译为普通的 Scala 函数。
例如,假设您有两个模板,template1和template2,它们都有输入参数a: String
。主模板应该使用这两个中的任何一个,因此它的参数为template: String => HtmlFormat.Appendable
.
模板1:
@(a: String)
@{ a + " world!" }
模板2:
@(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)