【问题标题】:HTML attribute in Scala TemplateScala 模板中的 HTML 属性
【发布时间】:2013-05-18 13:07:02
【问题描述】:

我是一名 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>

生成的链接的 href 为 localhost: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>
}

【问题讨论】:

    标签: scala playframework-2.0 scala-template


    【解决方案1】:

    对此不太确定,但我的猜测如下:@{ ... } 表示动态语句的开始,其所有内容都被视为 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>
      }
    }
    

    【讨论】:

    • 那行得通。第二个花括号是问题所在。此外,if 之后的空格和 else 之前的换行符在 Eclipse 中也会出现错误。谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多