2013-03-20 10 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(",") ]; 
} 

Вам не нужно это приводит «» вокруг ид. В javascript 1 == '1' is true

2

Я думаю, что каждый ответ хорош, но все еще небезопасен, потому что каждый ответ не заботится о ценности, которая включает в себя «или». К счастью, поддержка фрейма поддержки json, поэтому вы должны использовать json ., чтобы преобразовать в массив яваскрипта

@(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

+1

Это должно быть @Html (Json.stringify (Json.toJson (список))) – Ikrom