将Json数组映射到Scala / MongoDB中的一个输入框

时间:2017-12-03 20:08:06

标签: forms scala playframework

所以在 MongoDB ;想象一下,我有一个团队联盟的集合。每个文档代表一个团队的属性,例如

   "_id" : ObjectId("59ea36d3fdc2ce3d73c4be96"),
   "name" : Team 1,
   "stats" : {
      "goalsScoredThisSeason" : 17,
      "goalsConcededThisSeason" : 6,
      "avgTicketPrice" : 74.0,
      "thisSeasonFormArr" : [
          "W",
          "L",
          "D",
          ...
      ]
      ...

我使用scala forms创建输入框,填充集合中的值(编辑字段时)等等。我能够使用所有这些除外对于JsArray。有一个功能可以为字段数组创建适量的输入框(repeated values),但我更希望将所有值都放在一个输入框中,例如。

  

W,L,D,......

这是我的案例类(使用自动映射):

  case class FormData(_id: Option[BSONObjectID], name: String, stats: Option[Stats])

  case class Stats(goalsScoredThisSeason: Int, goalsConcededThisSeason: Int, avgTicketPrice: Double, thisSeasonFormArr: Option[JsArray])

所以我的表格看起来像这样:

  object MyForm {

     val form = Form(
        mapping(
          "_id" -> ignored(Option.empty[BSONObjectID]),
          "name" -> nonEmptyText,
          "stats" -> mapping(
             "goalsScoredThisSeason" -> number,
             "goalsConcededThisSeason" -> number,
             "avgTicketPrice" -> of(doubleFormat),
             "thisSeasonFormArr" -> optional(list(text)) // is this correct?
             ...
        )(FormData.apply)(FormData.unapply)
     )

  }

任何人都可以帮助我如何为thisSeasonFormArr创建合适的读取写入,以确保将jsArray转换为string,反之亦然(这样数组就可以映射到一个用逗号分隔的输入框)。如果您需要更多详细信息,请与我们联系。非常感谢

只是为了更新:我现在知道在表单中映射数组(字符串)就像这样"thisSeasonFormArr" -> optional(list(text));确保在案例类中我们thisSeasonFormArr: Option[List[String]]。这允许迭代( Play )模板中的List以创建多个输入框,如前所述。所以唯一的问题是要了解需要做什么才能让一个输入框包含连接数组的所有值(用逗号分隔) - 能够将它们映射到 Scala Play表单;为了阅读内容。

0 个答案:

没有答案