有没有更简单的方法呢?如何将scala列表转换为javascript数组?
$(document).ready(function() {
var jsArray = []
@if(scalaList != null) {
@for(id <- scalaList) {
jsArray.push('@id');
}
}
...
}
有没有更简单的方法呢?如何将scala列表转换为javascript数组?
$(document).ready(function() {
var jsArray = []
@if(scalaList != null) {
@for(id <- scalaList) {
jsArray.push('@id');
}
}
...
}
你有没有尝试过这样的:
var jsArray = new Array(@scalaList.map(x => "\"" + x + "\"").mkString(","));
,或者您可以使用文字像
var jaArray = [ var jsArray = [@scalaList.map(x => "\"" + x + "\"").mkString(",")];
而且不需要if
检查。 For
理解是这样的智能
$(document).ready(function() {
var jsArray = [@scalaList.map(x => "\"" + x + "\"").mkString(",")];
...
}
您可以使用mkString。
$(document).ready(function() {
var jsArray = @if(scalaList != null) {
[ @scalaList.mkString(",") ]}
else {[]};
}
您应该省略此if语句。取而代之的是,检查控制器空,把空单查看,所以这段代码可以在视图
$(document).ready(function() {
var jsArray = [ @scalaList.mkString(",") ];
}
你不需要这个引号“”围绕ID更简单。在JavaScript 1 =='1'是真的
我认为每个答案都很好,但仍然不安全,因为每个答案都不关心包含'或者'的值,幸运的是玩框架支持json,所以你应该使用json 。转换为JavaScript数组
@(json: String)
<html>
<head>
</head>
<body>
<script>
var json = @Html(json);
var list = json.list;
</script>
</body>
</html>
package controllers
import play.api._
import play.api.libs.json._
import play.api.mvc._
object Application extends Controller {
def index = Action {
val list = List("hoge\"hoge", "moge'mo\"ge")
val json = Json.stringify(Json.obj(
"list" -> JsArray(list.map(JsString(_)))
))
Ok(views.html.index(json))
}
}
这就像下面一样简单:
import play.api.libs.json.Json
val jsArr: JsValue = Json.toJson(scalaList)
你也可以做一个模板中:
@(list: List[Any])
@import play.api.libs.json.Json
<script type="text/javascript">
$(document).ready(function() {
var jsArr = @Json.toJson(list);
console.log(jsArr);
});
</script>
我得到这样的输出:VAR jsArr = [" XXXX "," YYYY "];而不是实际的引号。 – binshi 2016-08-26 02:30:08
它应该是@Html(Json.stringify(Json.toJson(list))) – Ikrom 2016-09-19 18:05:11