内联时未定义javascript变量

时间:2019-01-13 22:30:02

标签: javascript jquery html playframework twirl

背景

我正在使用PlayFramework创建一个Webapp(工作流)系统,该系统使用Twirl template engine(基于scala)创建我的视图。

问题:

我需要将JavaScript变量存储在模板(可呈现HTML)的内部,其中我将在单独的JS文件中稍后进行操作。

是否有现有解决方案?

这可以根据我发现的以下 SO 问题进行:

  1. This one创建一个地图,在其中存储数据并在以后检索。

  2. This one创建了一个简单的示例,将变量存储在嵌入式脚本标记中以供以后使用

  3. 最后,this one使用一个更具体的示例,将数据存储在模板的数据结构中,并在解析后访问JS中的数据结构。

由活跃的SO贡献者Biesior创建的示例,可以帮助许多开发人员玩Play!框架问题

总结应该要做的事情:

  1. 将一些数据传递到模板中

12

  1. 将传入的数据添加到具有JS名称的脚本标签中

@(myData: DataObject)

  1. 在JS / Google Chrome开发者控制台中使用

<html>
  <body>
    <script>
      let someJSDataName = @myData
    </script>
  </body>
</html>

应该显示一些结果!

但是出了什么问题?

让我告诉你。

呈现的HTML:

someJSDataName.toString

尝试在我的Google Chrome开发者控制台中访问此数据时:

//...
<div class="BoxMediumBlue" style="padding: 20px;">

        <script>
                let facultyDepartments = {Science=[Computer Science, Physics], Biology=[Zooology]};
        </script>

        <br>
        <div class="container-heading">
//...

仅供参考,使用facultyDepartments VM1209:1 Uncaught ReferenceError: facultyDepartments is not defined at <anonymous>:1:1 没什么

我做错什么了吗?

1 个答案:

答案 0 :(得分:1)

您对facultyDepartments的定义使用了JS引擎无法理解的语法:

let facultyDepartments = {Science=[Computer Science, Physics], Biology=[Zooology]};

对象应包含键值对,其中键和值由:分隔,并且键和值在字符串时具有定界符,例如"' 。您应该尝试获取模板来呈现JSON,例如:

let facultyDepartments = {"Science":["Computer Science", "Physics"], "Biology":["Zooology"]};
console.log(facultyDepartments.Science);

(JSON从技术上讲是格式化 strings 的一种方法,但是插入不带定界符的JSON字符串也可以将其解析为对象文字)