在播放框架中为复选框动态生成标签

Dynamically generate label for checkbox in play framework

我对 Scala 和 play 框架还很陌生,在为表单中的复选框生成标签时遇到了问题。标签是使用播放框架 (2.6.10) 及其旋转模板引擎生成的。我也在使用 play-bootstrap 库。

以下是我的form.scala.html.

的简化版
@(enrolForm: Form[EnrolData], repo: RegistrationRepository)(implicit request: MessagesRequestHeader)

@main("Enrol") {
    @b4.horizontal.formCSRF(action = routes.EnrolController.enrolPost(), "col-md-2", "col-md-10") { implicit vfc =>
        @b4.checkbox(enrolForm("car")("hasCar"), '_text -> "Checkbox @repo.priceCar")
    }
}

我无法 "evaluate" @repo.priceCar 部分。它只是没有被评估,我得到了文字字符串“@repo.priceCar”。

根据 the play framework documentation regarding string interpolation,我应该使用 $ 而不是 @,但这也不起作用。

当我遗漏字符串周围的 " 时,我会遇到各种错误。

如果能提示我必须做什么,我将不胜感激。

您的问题是编译器按字面意思读取字符串 Checkbox @repo.priceCar

您需要将字符串相加或使用字符串插值来访问此变量,因为 @ 在普通 Scala 字符串中不是有效的转义字符:

@b4.checkbox(enrolForm("car")("hasCar"), '_text -> s"Checkbox ${repo.priceCar}")

这是将变量 repo.priceCar 注入到字符串中,而不是将 repo.priceCar 按字面意思作为字符串读取。

一般来说,当你想在字符串中放置一个变量时,你会使用 $

var something = "hello" 
println(s"$something, world!") 

现在,如果有像user.username这样的成员,您需要使用${user.username}

println(s" current user is ${user.username}")

总的来说,您需要在 Playframework 的视图中使用转义字符 @,当您使用变量时,它将是:

s" Current user: ${@user.username}"

因此 '_text 值应如下所示:

'_text -> s"Checkbox ${repo.priceCar}" //we drop the @ because the line started with '@'