javascript - 玩! 2.1.1 framework javascript in template导致编译错误

标签 javascript scala playframework

我刚开始使用 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 中分离出来,你有两个解决方案,我认为第一个更好:

  1. 将你的 JS 保存到普通 *.js文件并将其包含在 <script src...> 中标签。如果你需要从你的 View 中传递一些数据,首先使用全局 JS var:

    <script>var helloMessage = "Welcome on page @title";</script> 
    <script src="/path/to/your.js"></script>
    
  2. 阅读JS的内容file (不是 Scala 模板!)在你的 Controller 中并作为 String 传递在 View 中,您需要使用 Html() 对其进行转义:

    @(title: String, mySpecialJS: String)(content: Html)
    <!DOCTYPE html>
    <html>
        <head>
            <title>@title</title>
            @Html(mySpecialJS)
        </head>
    <body>
    
  3. 您也可以加入这两种方法,例如,如果您想根据 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/

相关文章:

playframework - 类型 ""不是包 Controller Play Framework 的成员

scala - 与 acceptWithActor[String, JsValue] 等效的 Play 2.5.x 是什么?

javascript - 在 Blogger 中按标签导航下一篇和上一篇文章

javascript - 按键分组对象数组并将分组结果与日期数组进行比较

scala - 是否有命令行程序来查找 Scaladoc?

java - 当我使用 akka 流在现有消费者组中创建新消费者时,如何寻求 kafka 主题的结束?

scala - 案例类的隐式解析和伴随对象

playframework - Play 框架和线程池

javascript - 我可以从 Kate 编辑器的 JavaScript 访问 shell、web 或菜单命令吗?

javascript - 使用 jquery 或 javascript 更改表格单元格的高度属性值