使用Play框架模板中的Scala列表填充Javascript数组
好的,我有一个模板!接收列表作为参数的: @(操作:列表[RecipientAction]) RecipientAction只是一个带有几个字段的常规case类。在模板中,我有一个使用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中存储的属性的对象填充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的地方。关于字符串的必要警告,包括引号等。