これを行う簡単な方法はありますか?
$(document).ready(function () {
var jsArray = []
@if(scalaList != null) {
@for(id <- scalaList) {
jsArray.push('@id');
}
}
...
}
これを行う簡単な方法はありますか?
$(document).ready(function () {
var jsArray = []
@if(scalaList != null) {
@for(id <- scalaList) {
jsArray.push('@id');
}
}
...
}
次のように簡単です。
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>
これには mkString を使用できます。
$(document).ready(function () {
var jsArray = @if(scalaList != null) {
[ @scalaList.mkString(",") ]}
else {[]};
}
ビューでは、この if ステートメントを省略してください。これの代わりに、コントローラーで null をチェックし、空のリストをビューに配置して、このコードをよりシンプルに表示できるようにします。
$(document).ready(function () {
var jsArray = [ @scalaList.mkString(",") ];
}
ID を囲むこの引用符 ' ' は必要ありません。JavaScript 1 == '1' は真です
次のようなことを試しましたか:
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(",")];
...
}
すべての答えは良いと思いますが、すべての答えは ' または " を含む値を気にしないため、安全ではありません。幸いなことに、フレームワーク サポート 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))
}
}