2013-03-20 17 views

回答

2

你有没有尝试过这样的:

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(",")]; 
    ... 
} 
3

您可以使用mkString。

$(document).ready(function() { 
    var jsArray = @if(scalaList != null) { 
     [ @scalaList.mkString(",") ]} 
    else {[]}; 
    } 

您应该省略此if语句。取而代之的是,检查控制器空,把空单查看,所以这段代码可以在视图

$(document).ready(function() { 
    var jsArray = [ @scalaList.mkString(",") ]; 
} 

你不需要这个引号“”围绕ID更简单。在JavaScript 1 =='1'是真的

2

我认为每个答案都很好,但仍然不安全,因为每个答案都不关心包含'或者'的值,幸运的是玩框架支持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)) 
    } 

} 
7

这就像下面一样简单:

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> 
+0

我得到这样的输出:VAR jsArr = [" XXXX "," YYYY "];而不是实际的引号。 – binshi 2016-08-26 02:30:08

+1

它应该是@Html(Json.stringify(Json.toJson(list))) – Ikrom 2016-09-19 18:05:11