Scala Play 中的可互换菜单
Interchangeable menu in Scala Play
目前我正在使用 Bootstrap 和 Scala Play 开发 Web 应用程序,但我不太了解模板引擎。
我想要不同的 Bootstrap 导航栏。第一个,如果用户尚未登录。
还有第二个视图,当用户登录时,he/she 可以在导航栏的右上角看到她的名字。
因此我创建了一个 loginMenu.scala.html 文件,使导航栏的右侧可以互换
<li class="dropdown">
<a class="dropdown-toggle" href="#" data-toggle="dropdown">
Login
<strong class="caret"></strong>
</a>
<div class="dropdown-menu login-menu" role="menu">
<form class="form-horizontal" action="@routes.Authentication.authenticate" method="post">
<input type="email" class="form-control" placeholder="email" name="email" id="email">
<input type="password" class="form-control" placeholder="password" name="password", id="password">
<label class="checkbox" style="padding-top:0px">
<input type="checkbox" checked="checked" value="1"> Remember me
</label>
<button class="btn btn-danger" type="submit">Login</button>
</form>
</div>
</li>
然后我尝试将其动态插入到我的导航栏模板中 main.scala.html
@(title: String, currentPage: String)(rightMenu: Html)(content: Html)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
...
</head>
<!-- Bootstrap navbar here-->
...
<!--right side of Bootstrap nav -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
@rightMenu
</ul>
</div>
在我的其他网站中,我使用这样的东西:
@main("Welcome to Play", "Home") (@loginMenu){
<div class="container">
<h2>Home</h2>
</div>
}
当我尝试启动它时,出现以下错误。
[error]home.scala.html:3: missing arguments for method apply in object main;
[error] follow this method with `_' if you want to treat it as a partially applied function
[error] @main("Welcome to Play", "Home") (@loginMenu){
^
我只是想让@loginMenu 打印我当前文件中的原始HTML。我该怎么做呢?
如果您将 loginMenu
作为 main
的参数应用,您不需要在它前面加上 @
,因为您已经在 Scala 代码块中.
尝试:
@main("Welcome to Play", "Home")(loginMenu()) {
<div class="container">
<h2>Home</h2>
</div>
}
我想你快到了
@main("Welcome to Play", "Home") {@loginMenu()} {
^ ^^^
^ ^^^
<div class="container">
<h2>Home</h2>
</div>
}
如果你超过 Html
,请注意 curly braces
和 circular braces
或带圆括号:
@main("Welcome to Play", "Home")(loggedInMenu.apply()) {...}
注意之间不要放一个白色的space
("Welcome to Play", "Home")
和 (loggedInMenu.apply())
。不然不行。
目前我正在使用 Bootstrap 和 Scala Play 开发 Web 应用程序,但我不太了解模板引擎。
我想要不同的 Bootstrap 导航栏。第一个,如果用户尚未登录。
还有第二个视图,当用户登录时,he/she 可以在导航栏的右上角看到她的名字。
因此我创建了一个 loginMenu.scala.html 文件,使导航栏的右侧可以互换
<li class="dropdown">
<a class="dropdown-toggle" href="#" data-toggle="dropdown">
Login
<strong class="caret"></strong>
</a>
<div class="dropdown-menu login-menu" role="menu">
<form class="form-horizontal" action="@routes.Authentication.authenticate" method="post">
<input type="email" class="form-control" placeholder="email" name="email" id="email">
<input type="password" class="form-control" placeholder="password" name="password", id="password">
<label class="checkbox" style="padding-top:0px">
<input type="checkbox" checked="checked" value="1"> Remember me
</label>
<button class="btn btn-danger" type="submit">Login</button>
</form>
</div>
</li>
然后我尝试将其动态插入到我的导航栏模板中 main.scala.html
@(title: String, currentPage: String)(rightMenu: Html)(content: Html)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
...
</head>
<!-- Bootstrap navbar here-->
...
<!--right side of Bootstrap nav -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
@rightMenu
</ul>
</div>
在我的其他网站中,我使用这样的东西:
@main("Welcome to Play", "Home") (@loginMenu){
<div class="container">
<h2>Home</h2>
</div>
}
当我尝试启动它时,出现以下错误。
[error]home.scala.html:3: missing arguments for method apply in object main;
[error] follow this method with `_' if you want to treat it as a partially applied function
[error] @main("Welcome to Play", "Home") (@loginMenu){
^
我只是想让@loginMenu 打印我当前文件中的原始HTML。我该怎么做呢?
如果您将 loginMenu
作为 main
的参数应用,您不需要在它前面加上 @
,因为您已经在 Scala 代码块中.
尝试:
@main("Welcome to Play", "Home")(loginMenu()) {
<div class="container">
<h2>Home</h2>
</div>
}
我想你快到了
@main("Welcome to Play", "Home") {@loginMenu()} {
^ ^^^
^ ^^^
<div class="container">
<h2>Home</h2>
</div>
}
如果你超过 Html
curly braces
和 circular braces
或带圆括号:
@main("Welcome to Play", "Home")(loggedInMenu.apply()) {...}
注意之间不要放一个白色的space
("Welcome to Play", "Home")
和 (loggedInMenu.apply())
。不然不行。