在我的play框架项目中,我有一个确认的Java表格的函数Java映射,它传递给html页面home.scala.html
传递map变量,其他(工作)变量位于页面顶部:
@(workingVar1: String, workingVar2: Int, mapVar: Map[Long, Integer])
但谷歌浏览器中的开发者工具突出了javascript的这一部分(嵌入在home.scala.html' s):
var myMap = @mapVar;
错误Uncaught SyntaxError: Unexpected token =
所以javascript都没有用。传递此地图的正确方法是什么?
答案 0 :(得分:0)
您可以在Twirl Scala模板中使用Java / Scala变量,并且两者都在服务器端执行。 现在在服务器端,Twirl引擎将Java对象转换为某些东西(可能不是你想要的东西),并以这种形式传递给客户端,然后执行这个JavaScript。
您希望确保客户端将收到有效的JavaScript代码。 要分配适当的值,您必须混合一些JSON库,这将帮助您以适当的方式分配值。
EG。在控制器方面:
...
Map<Long, Integer> map = new HashMap<>();
map.put(1L, 2);
map.put(3L, 3);
String yourMap = Json.stringify(Json.toJson(map));
现在您要传递yourMap
进行查看,然后您将分配到myMap
使用@Html
,因为我们希望它作为原始内容片段:
@(workingVar1: String, workingVar2: Int, mapVar: String)
var myMap = @Html(mapVar);
尝试并告诉我它是否有帮助。
答案 1 :(得分:0)
一个不优雅但功能性的解决方案如下:
将Java Map作为字符串输入:
var stringMap = "@mapVar";
不必要地删除插入字符串的大括号和空格
stringMap = stringMap.replace(/{/g,'');
stringMap = stringMap.replace(/}/g,'');
stringMap = stringMap.replace(/ /g,'');
按,
拆分mapString,并按=
再次拆分每一对,随时提取键和值。在添加到javascript数组jsArr
之前,需要将它们解析为正确的数据类型:
var pairArray = mapString.split(",");
pairArray.forEach(function(pair) {
var values = pair.split("=");
var longString = values[0];
var intString = values[1];
var myLong = parseFloat(longString);
var myInt = parseInt(intString);
jsArr.myLong = myInt;
}
先前已定义过jsArr。