0

我正在使用 Play 和 Scala,但似乎无法弄清楚这一点。
在我的控制器中,我有 2 个具有相同键但值不同的映射。然后,在视图上,我遍历第一个映射并尝试使用键(来自迭代器)对第二个映射进行查找。当我这样做时

@map1.map { f =>
    <span>Key: @f._1</span>
    <span>Value from second map: @map2.getOrElse(@f._1, "default value")
}

它不编译。它抱怨以下错误消息:“简单表达式的非法开始”(指向第二个@f._1)。
很明显,嵌套的 @ 是导致问题的原因,因为如果我将第二个 @f._1 替换为常量,它就可以正常工作。

@map1.map { f =>
    <span>Key: @f._1</span>
    <span>Value from second map: @map2.getOrElse("my known key", "default value")
}

有人知道是否可以嵌套这 2 个 @ 吗?我尝试了各种事情(双@,双引号),但没有帮助?

4

2 回答 2

1

map并且if在 Play 中不是简单的 Scala。这是一种特殊的模板结构。在里面{}你可以使用任何 html 代码,包括嵌套的@-表达式。

相反——@-expressions 主要是 Scala(不包括maps 和ifs、flatMaps 和其他for-comprehensions)。

看看 Play 的模板引擎(http://www.playframework.com/documentation/2.0.1/ScalaTemplates)。

在您的情况下,是一个没有s 和s@map2.getOrElse(f._1, "default value")的简单 Scala 表达式。所以这里不需要@。ifmap

于 2013-11-11T19:18:32.430 回答
1

尝试不使用“@”,如下所示:

@map1.map { f =>
<span>Key: @f._1</span>
<span>Value from second map: @map2.getOrElse(f._1, "default value")
}
于 2013-11-11T19:12:53.140 回答