好的,我在 Play 中有一个模板!接收列表作为参数:
@(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;
}
当我运行它时,我收到错误“未找到:值 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 宏之一,它将自动为案例类创建一个 Writes
,因为我们只关心打印列表。
然后在您的模板中:
@(actions : List[RecipientAction])
@import play.api.libs.json.Json
<script type="text/javascript">
var testArray = @Html(Json.stringify(Json.toJson(actions)));
</script>
需要定义隐式写入
,以便Json.toJson
知道如何将类转换为 JSON。有关 Json 序列化/反序列化的更多信息,请参阅 documentation .
关于javascript - 在 Play 框架模板中使用 Scala List 填充 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24459689/