好的,所以我在Play中有一个模板!接收List作为参数:
@(actions:List [RecipientAction])
RecipientAction只是一个包含几个字段的常规案例类。在模板中,我有一个<script>
标记,我想用D3来制作折线图。在脚本中,我想用包含存储在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;
}
当我运行它时,我收到错误&#34;未找到:值i&#34;。这是因为i
是客户端变量,而actions
是服务器端变量,因此scala找不到i
。解决这个问题并成功填充阵列的最佳方法是什么?
答案 0 :(得分:3)
您需要为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宏,它会自动为案例类创建Writes
,因为我们所关心的只是打印列表。
然后在你的模板中:
@(actions : List[RecipientAction])
@import play.api.libs.json.Json
<script type="text/javascript">
var testArray = @Html(Json.stringify(Json.toJson(actions)));
</script>
需要定义implicit Writes
,以便Json.toJson
知道如何将类转换为JSON。有关Json序列化/反序列化的更多信息,请参阅documentation。