Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Play框架模板中的Scala列表填充Javascript数组_Javascript_Scala_Playframework_Client Side_Server Side - Fatal编程技术网

使用Play框架模板中的Scala列表填充Javascript数组

使用Play框架模板中的Scala列表填充Javascript数组,javascript,scala,playframework,client-side,server-side,Javascript,Scala,Playframework,Client Side,Server Side,好的,我有一个模板!接收列表作为参数的: @(操作:列表[RecipientAction]) RecipientAction只是一个带有几个字段的常规case类。在模板中,我有一个标记,我想用它来制作折线图。在脚本中,我想用包含RecipientAction中存储的属性的对象填充JavaScript数组,以便在以后的折线图中使用它们。我目前有以下代码: testArray2=[]; for(var i=0; i < @actions.length;i++){

好的,我有一个模板!接收列表作为参数的:

@(操作:列表[RecipientAction])

RecipientAction只是一个带有几个字段的常规case类。在模板中,我有一个
标记,我想用它来制作折线图。在脚本中,我想用包含RecipientAction中存储的属性的对象填充JavaScript数组,以便在以后的折线图中使用它们。我目前有以下代码:

      testArray2=[];

      for(var i=0; i < @actions.length;i++){
        testArray2[i]= {};
        testArray2[i].eventAt= @actions(i).eventAt.toString();
        testArray2[i].action= @actions(i).action.id;

      }
testArray2=[];
对于(var i=0;i<@actions.length;i++){
testArray2[i]={};
testArray2[i].eventAt=@actions(i).eventAt.toString();
testArray2[i].action=@actions(i).action.id;
}

当我运行它时,我得到错误“未找到:值i”。这是因为
i
是客户端变量,而
actions
是服务器端变量,因此scala无法找到
i
。解决此问题并成功填充阵列的最佳方法是什么

您需要为您的
RecipientAction
创建一个JSON序列化程序,然后您就可以在模板中将列表打印为JSON。说它看起来像这样

import play.api.libs.json._

case class RecipientAction(id: Int, description: String)

object RecipientAction {
     // Define a `Writes` for `RecipientAction`
     implicit val writes: Writes[RecipientAction] = Json.writes[RecipientAction]
}
我使用了Play中包含的一个JSON宏,它将自动为case类创建一个
Writes
,因为我们所关心的只是打印列表

然后在模板中:

@(actions : List[RecipientAction])
@import play.api.libs.json.Json

<script type="text/javascript">
    var testArray = @Html(Json.stringify(Json.toJson(actions)));
</script>
@(操作:列表[RecipientAction])
@导入play.api.libs.json.json
var testArray=@Html(Json.stringify(Json.toJson(actions));

需要定义
隐式写入
,以便
Json.toJson
知道如何将类转换为Json。有关Json序列化/反序列化的更多信息,请参阅。

Json可能是正确的方法,但是如果您想要更基本的内容,请查看第二个答案使用mkString的地方。关于字符串的必要警告,包括引号等。