1

几天来,我一直在使用 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

如何使用 Play 2.0 定义标签?

4

1 回答 1

3

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

你打算做的是使用

@routes.Assets.at("javascripts/" + name)
于 2012-09-20T05:18:31.787 回答