Java / Scala:了解Play框架自定义标记或帮助程序

时间:2012-09-20 04:19:12

标签: java scala playframework-2.0

我一直在使用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

How to define a tag with Play 2.0?

1 个答案:

答案 0 :(得分:3)

@routes.Assets.at(...)评估Scala表达式routes.Assets.at(...)并将结果替换为输出。没有递归评估可以让您以文本方式评估表达式以获取该表达式,这似乎是您所期望的。

您打算使用

实现目标
@routes.Assets.at("javascripts/" + name)