【问题标题】:playframework template quote/quotation rulesplayframework 模板报价/报价规则
【发布时间】:2016-03-28 16:56:27
【问题描述】:

来自首页的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>

然而,play 根本不喜欢这样,产生的错误信息是:

"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";

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

【问题讨论】:

    标签: java html scala playframework playframework-2.0


    【解决方案1】:

    您必须在此处将两个不同的级别分开:HTML 和 Scala。

    Scala 首先通过,替换以@ 符号(以及一些其他已知标识符)开头的内容。所以让我们删掉 Scala 读取和使用的东西:

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

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

    所以逻辑是基本的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>
    

    请注意,在很多编辑器中,第二个选项的语法高亮会中断,包括上面的代码块

    【讨论】:

    • 啊,谢谢你的回复。是的,我现在明白错误信息了。所以现在我想我应该更深入地阅读在 HTML 模板文件中嵌入 Scala 代码的规则;即,当文件周围有一些 HTML 浮动时,Scala 语句或块之间的分隔规则。
    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2020-11-12
    • 2022-08-24
    • 2020-07-04
    • 1970-01-01
    • 2014-08-14
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多