在此示例Play框架代码(表单映射)中使用unapply有什么用?

时间:2013-01-29 22:55:11

标签: scala playframework playframework-2.0

我是Play框架的新手,并且已经过了samples,在computer-database示例中,我发现了以下不完全理解的表单定义。

此处Computer.applyComputer.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但仍然不确定我是否完全了解。

2 个答案:

答案 0 :(得分:5)

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

  

在apply方法中,我们获取所需的参数并返回新的参数   我们感兴趣的类的实例在我们反向的位置   unapply-我们采取实例并提取所需的信息   并以元组的形式返回它们。

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

答案 1 :(得分:4)

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

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

由于您要转到/来自Computer,因此您需要一种方法可以从参数中创建Computer,并且需要从Computer中提取参数的方法,而这正是{ {1}}和Computer.apply

相关示例:Play documentation on forms中的映射示例。