Scala /播放如何更新main.scala.html HTML以显示/隐藏文本

时间:2016-10-25 15:27:29

标签: javascript html scala playframework

我是Scala和Play的新手,并且正在使用main.scala.html页面 - 在我的理解中,它被用作单页面应用程序(SPA)框架。我希望这是一个正确的陈述。

我正在尝试根据使用应用程序设置的会话变量将链接/文本从Login切换到Logout。出于某种原因,main.scala.html页面将无法识别此变量,即使它已更改。

这是main.scala.html代码摘录:

@(user: User = null, scripts: Html = Html(""), isLoggedIn: String = "")(content: Html)

<!DOCTYPE html>

<html>
    <head>
...
        <script type="text/javascript">
            @isLoggedIn = isLoggedIn();
        </script> 
    </head>
    <body>
...
<div class="pull-right">
                        <nav class="navmenu center">
                            <ul>
                                <li class="scroll_btn"><a href="/">Home</a></li>
                                <li class="scroll_btn"><a href="/signup">Register</a></li>
                                @if(isLoggedIn == true) {
                                    <li class="scroll_btn"><a href="/logout">Logout</a></li>
                                } else {
                                    <li class="scroll_btn"><a href="/auth">Login</a></li>
                                }
                            </ul>
                        </nav>
</div>
...
</body>
</html>

这是isLoggedIn()函数: function isLoggedIn(){

var email = '<%= Session["email"] %>';
if (email != null || email != "") {
return true;
}
else {
 return false;
}
}

我知道电子邮件会话变量已设置 - 它不为空,因此代码应该有效。

main.scala.html是否存在某种“刷新”问题?或者Scala不能作为SPA框架运行?

我感谢任何帮助。

谢谢! 丹

2 个答案:

答案 0 :(得分:0)

在模板声明中,您将isLoggedIn声明为String。但是你试图在if表达式中使用它作为布尔值。

你的if条件也错了。 isLoggedIn为真时显示登录信息。

@if(isLoggedIn) {
    <li class="scroll_btn"><a href="/auth">Login</a></li>
} else {
   <li class="scroll_btn"><a href="/logout">Logout</a></li>
}

答案 1 :(得分:0)

播放模板默认情况下不是SPA。你可以通过添加AngularJS或你最喜欢的JavaScript SPA框架来实现它们。在服务页面时,在服务器端评估(和替换)以@开头的所有内容。因此,如果您在浏览器中检查它,您的JavaScript语句@isLoggedIn = isLoggedIn();可能看起来像true = isLoggedIn();甚至= isLoggedIn();(例如,如果isLoggedIn变量恰好是空白的话)。

如果像@pamu建议的那样,你将它改为布尔值而不是字符串,那么你的模板代码可以进行一次性检查(评估/替换只发生一次),以便按照建议的方式生成。

如果你想要更动态的东西,即不想加载整个页面以进行更改,那么你将不得不在前端寻找JavaScript和SPA框架。