如何替换 Js 全局变量并处理 Play Framework 中的 scala 变量?

How do I replace Js Global Variables and handle scala variables in Play Framework?

我有 3 个由 Java 创建的地图变量,它们作为 3 个 Scala 变量传递到我的 Playframework 的 scala.html 页面。

这 scala.html 将它们传递给三个全局 Js 变量,然后由 GoogleCharts (Javascript) 解释。

单独使用其中一个全局变量可以按预期显示图表,但使用两个或三个意味着不会显示任何图表。

我知道全局变量是不好的做法,我明白为什么。将这 3 个 scala 变量传递给 JS 的最简单方法是什么?

<head>
...
<script>
window.APP = {sMap: '@sMap'};
</script>
<script type="text/javascript" src="@routes.Assets.at("/public/javascripts", "sChart.js")"></script>
<script>
window.APP = {eMap: '@eMap'};
</script>
<script type="text/javascript" src="@routes.Assets.at("/public/javascripts", "eChart.js")"></script>
<script>
window.APP = {vMap: '@vMap'};
</script>
<script type="text/javascript" src="@routes.Assets.at("/public/javascripts", "vChart.js")"></script>
</head>

其中一个 js 文件的示例:

function drawChart() {
var sMap = window.APP.sMap;
var data = new google.visualization.DataTable();
data.addColumn('number', 'Count');
var mapString = sMap;
...;

当我从函数外部声明全局变量时它起作用了(我之前在函数内部有它,它只使用一个变量,但停止使用两个或更多变量)。

我现在拥有的是这样的:

var sMap = window.APP.sMap;

function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('number', 'Count');
var mapString = sMap;
...;