2

我是一名 Java 开发人员,最近开始学习 Play Framework。我一直试图让下面的模板工作,但似乎无法得到它。我的 Scala 模板中有以下内容

@navItem(label: String, link1: String) = {
    @{if (Application.isAuthenticated()) {
    <li class="active">
        <a href="@link1">label</a>
    </li>
    }
    else {
    <li class="disabled">
        <a href="@link1">{label}</a>
    </li>
    }
    }
}

我稍后会在我的模板中这样调用它

<ul class="nav">
@navItem("Search Documents", "/search")
</ul>

生成的链接具有 hreflocalhost:9000/@link1而不是localhost:9000/search. 我不确定发生了什么。

PS:如果我如下更改我的模板,它工作正常。但我想了解为什么上述模板不起作用。

@navItem(label: String, link1: String) = {
    <li class="@(if (Application.isAuthenticated()) "active" else "disabled")">
        <a href="@link">@label</a>
    </li>
}
4

1 回答 1

7

对此不太确定,但我的猜测如下:@{ ... }表示动态语句的开始,其所有内容都被视为 Scala 代码。因此,这是一个正常的 if 条件,结果是两个字符串,这两个字符串都在模板中简单地返回。

你为什么将它标记为多行代码块?你试过这样吗?@(注意第二个符号后缺少的花括号):

@navItem(label: String, link1: String) = {
  @if(Application.isAuthenticated()) {
    <li class="active">
      <a href="@link1">@label</a>
    </li>
  } else {
    <li class="disabled">
      <a href="@link1">@label</a>
    </li>
  }
}
于 2013-05-19T09:23:53.103 回答