java - playframework模板报价/报价规则

标签 java html scala playframework playframework-2.0

从首页的 playframework 教程中, https://www.playframework.com/ 培训师将引导您完成一个简单的示例,最终导入 javascript (coffeescript) 文件以动态生成列表。

他在index.scala.html模板文件中写了这个,所以:

<script type='text/javascript' src='@routes.Assets.at("js/index.js")'></script>

注意,src 属性是单引号的,封装的 at 方法使用双引号作为其单个字符串参数。

这并不完全符合我的预期,因为我知道 @routes.Assets.at 方法将被结果值替换,而且我记得它在许多编程语言(例如 Perl)中很典型单引号指定固定/静态字符串值。但是好吧,我想当我们查看 HTML 脚本标记的属性的开头时,这是可以的。

Perl:

my $name = "Fred";
print "Hello $name\n";  // prints Hello Fred (with an endline afterwards)
print 'Hello $name\n';  // prints Hello $name\n

https://en.wikibooks.org/wiki/Perl_Programming/Strings

尽管如此,我个人并不喜欢它。我更喜欢使用相反的方式:

<script type="text/javascript" src="@routes.Assets.at('javascripts/index.js')"></script>

但是,游戏根本不喜欢这样,产生的错误消息是:

"Multiple annotations found at this line:
    - unclosed character literal
    - ')' expected but something 
     found."

这是最出乎意料的,因为它在 HTML 中是允许的, http://www.w3.org/TR/html4/intro/sgmltut.html#h-3.2.2

并且在 Java 中也允许。例如:

String test = "this is 'not' a test";

那么,问题是:这背后的逻辑是什么? 我可以在某处找到记录的“规则”吗? 它是特定于 Play 的,还是因为它是某种 Scala 相关文件 (index.scala.html),所以它是由于 Scala 语法的问题造成的? (我刚刚开始了解 Scala)

最佳答案

您必须在这里区分两个不同的级别:HTML 和 Scala。

Scala 首先进行检查,替换以 @ 符号(以及其他一些已知标识符)开头的内容。因此,让我们删除 Scala 读取和使用的内容:

@routes.Assets.at('javascripts/index.js')

正如您所看到的,该方法被赋予一个字 rune 字作为参数,但具有字符串内容 - 这在 Java 中是不可能的(在 Scala 中也是不可能的)。 这也是它试图在错误消息中告诉您的内容,它找到了字 rune 字和字符的开头,但随后字 rune 字并未终止。

所以逻辑是基本的Java逻辑。这是这些编译模板的棘手问题之一:您必须在头脑中区分哪些内容通过哪个解析器。

根据所涉及的两种语言的规则,允许以下组合:

<script type='text/javascript' src='@routes.Assets.at("js/index.js")'></script>
<script type='text/javascript' src="@routes.Assets.at("js/index.js")"></script>

请注意,在许多编辑器中,第二个选项的语法突出显示将会中断,包括上面的代码块

关于java - playframework模板报价/报价规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34415643/

相关文章:

java - 用空字符串装饰器替换 null

xml - pretty-print - Spark/Scala 中的 XML 单记录

javascript - 手机网站测试 : Emulators vs Real Devices

scala - Scala Option 的 isDefined 和 nonEmpty 方法之间的区别

scala - 如何在Scala中对Future进行投票?

java - 将过滤器引入 App Engine 应用程序的正确方法是什么?

java - 如何按降序对包含字符串的 arrayList 进行排序

JavaMail - 附件文件名未正确显示 UTF-8 字符

c# - 在 asp.net 中,在运行时或设计时添加属性哪个更有效?

javascript - 使用 D3.js 进行数据绑定(bind)