我一直在使用Play 2.0框架几天来在我的工作中进行概念验证。我想要检查的第一件事就是自定义标记功能,因为它让我想起了ASP.Net MVC中的HtmlHelpers。问题是,我似乎无法使它们发挥作用,并且想知道我是否滥用了这个功能或误解了某些内容。
以下是我想要做的一个简单示例:我希望能够在模板中的任何位置使用@script(“scriptname.js”)并将其替换为整个标记。
这是我到目前为止所得到的:
main.scala.html
@(title: String, scripts: Html = Html(""))(content: Html)
@import tags._
<!DOCTYPE html>
<html>
<head>
<!-- this is how I would like to use the helper/tag -->
@script("jquery.js")
@script("jquery-ui.js")
<!-- let views add their own scripts. this part is working OK -->
@scripts
</head>
<body>
@content
</body>
</html>
我在app / views目录下创建了一个名为“tags”的子目录。在那里我创建了我的script.scala.html标签/帮助文件:
@(name: String)
<script src="@routes.Assets.at("javascripts/@name")" type="text/javascript"></script>
我遇到的问题是每当我使用@script()时输出都包含@name参数。例如@script(“x.js”)实际输出
<script src="assets/javascripts/@name" type="text/javascript"></script>
我做错了什么?
为了记录,我确实阅读了文档并在这里搜索,但这些链接都没有帮助我解决这个问题:
http://www.playframework.org/documentation/2.0.3/JavaTemplateUseCases
答案 0 :(得分:3)
@routes.Assets.at(...)
评估Scala表达式routes.Assets.at(...)
并将结果替换为输出。没有递归评估可以让您以文本方式评估表达式以获取该表达式,这似乎是您所期望的。
您打算使用
实现目标@routes.Assets.at("javascripts/" + name)