javascript - 在 Play 框架模板中使用 Scala List 填充 Javascript 数组

标签 javascript scala playframework client-side server-side

好的,我在 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/

相关文章:

Java 玩!框架 1.2.4 : Exracting link value from Mockmail with selenium

java - Play Framework 2.3.4 - 如何在 POST 请求上调用 Results.badRequest() 并定向到 Controller 中未通过路由映射的方法?

javascript - CSS/JS 图片滑出动画

javascript - typescript |扩展错误(未捕获的类型错误 : this is not a X object)

javascript - 如何去除 HighCharts 饼图中的白色边框?

java - 在 Intellij IDEA 13 中玩框架 2 运行单元测试

scala - 没有初始化/无时,是否有最佳实践为 Scala 选项赋值?

javascript - 使用不带参数的 Javascript slice() 方法

scala - Spark 1.6.1 : Task not serializable when evaluating a classifier on a DataFrame

java - Assets 未在功能测试模式下加载