我刚开始使用 play 框架。喜欢它,除了我在使用 View 模板时遇到问题。
每当我直接在 View 模板上包含 javascript 时,都会出现编译错误。这玩意不可以吗!模板化?
@(title: String)(content: Html)
<!DOCTYPE html>
<html>
<head>
<title>@title</title>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
<link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
<script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"></script>
</head>
<body>
<script>
function isEmpty(obj) {
//for(var prop in obj) {
//if(obj.hasOwnProperty(prop))
try{
if(JSON.stringify(obj)=='{}'){
return true;
}else{
return false;
}
}catch(e){
return false;
}
}
</script>
我收到错误消息“未解析?”在函数 isEmpty(obj) {
提前谢谢你。
最佳答案
即使您使用 //
注释 JavaScript 行模板的解析器括号是一个特殊的字符:
//for(var prop in obj) {
通常,Scala 模板中的括号具有特殊含义,因此直接在 View 中构建高级 JavaScript 会导致很多问题。您仍然需要控制 JS 中新的 innocent 更改是否不会破坏模板解析器,反之亦然 - 如果模板解析器不会破坏您的脚本。最简单的解决方案就是将 JS 从 View 中分离出来,你有两个解决方案,我认为第一个更好:
将你的 JS 保存到普通
*.js
文件并将其包含在<script src...>
中标签。如果你需要从你的 View 中传递一些数据,首先使用全局 JS var:<script>var helloMessage = "Welcome on page @title";</script> <script src="/path/to/your.js"></script>
阅读JS的内容
file
(不是 Scala 模板!)在你的 Controller 中并作为String
传递在 View 中,您需要使用Html()
对其进行转义:@(title: String, mySpecialJS: String)(content: Html) <!DOCTYPE html> <html> <head> <title>@title</title> @Html(mySpecialJS) </head> <body>
您也可以加入这两种方法,例如,如果您想根据 Controller / View 元素将复杂对象传递给 JavaScript,您还可以构建一个
JSON
Controller 中的对象,将其转换为String
然后包含带有公共(public)标签的 JS:@(title: String, myJsConfig: String)(content: Html) <!DOCTYPE html> <html> <head> <title>@title</title> <script>var myJsConfig = @Html(myJsConfig)</script> <script src="/path/to/your.js"></script> </head> <body>
所以最后在your.js
您可以像往常一样使用它们:
alert(helloMessage);
console.log("Config is...");
console.log(myJsConfig);
关于javascript - 玩! 2.1.1 framework javascript in template导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15960737/