10

我是 Play 框架的新手,正在阅读 2.1示例,在computer-database示例中,我发现了以下我不完全理解的表单定义。

Computer.apply和在这里的作用是什么Computer.unapply

  val computerForm = Form(
    mapping(
      "id" -> ignored(NotAssigned:Pk[Long]),
      "name" -> nonEmptyText,
      "introduced" -> optional(date("yyyy-MM-dd")),
      "discontinued" -> optional(date("yyyy-MM-dd")),
      "company" -> optional(longNumber)
    )(Computer.apply)(Computer.unapply)
  )

(来自controllers/Application.scala

编辑:这似乎是一个很好的资源:https ://groups.google.com/forum/?fromgroups=#!topic/play-framework/dxNQ8E81YJs但仍然不确定我是否完全了解全局。

4

2 回答 2

5

您应该了解在 Scala 上下文中应用/取消应用的内容,因为它不是特定于 Play2/forms。

在 apply 方法中,我们获取所需的参数并返回我们感兴趣的类的新实例,就像我们在 unapply 中做相反的那样 - 我们获取实例并提取所需的信息并以元组的形式返回它们。

简而言之:apply用于从参数构造计算机对象。unapply用于相反的情况,从 Computer 对象中提取参数。

于 2013-01-29T23:08:47.360 回答
5

当您想要将表单绑定到案例类的字段(在本例中Computer)时,这是 Play 中的常见模式。

mapping方法允许您提供构造和解构函数,这些函数将被调用以填充表单并从中提取数据。

因为在这里你想去/从Computer,你需要一个方法来创建一个Computerfrom 参数,以及一个从 a 中提取参数的方法Computer,这正是Computer.applyand Computer.unapply

相关示例:Play 文档中有关 forms的映射示例。

于 2013-01-29T23:14:25.083 回答