背景:
我正在使用PlayFramework创建一个Webapp(工作流)系统,该系统使用Twirl template engine(基于scala)创建我的视图。
问题:
我需要将JavaScript变量存储在模板(可呈现HTML)的内部,其中我将在单独的JS文件中稍后进行操作。
是否有现有解决方案?
这可以根据我发现的以下 SO 问题进行:
This one创建一个地图,在其中存储数据并在以后检索。
This one创建了一个简单的示例,将变量存储在嵌入式脚本标记中以供以后使用
最后,this one使用一个更具体的示例,将数据存储在模板的数据结构中,并在解析后访问JS中的数据结构。
由活跃的SO贡献者Biesior创建的示例,可以帮助许多开发人员玩Play!框架问题
总结应该要做的事情:
12
@(myData: DataObject)
<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
没什么
我做错什么了吗?
答案 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字符串也可以将其解析为对象文字)