玩!框架表格/ HTML助手:关注点分离?

时间:2013-04-08 14:37:20

标签: scala playframework playframework-2.1 separation-of-concerns

我刚开始使用Scala玩Play 2.1.1。通过一些教程/示例应用程序,我遇到了可用于创建表单的辅助方法,例如:

@(myForm: Form[User])

@helper.form(action = routes.Application.submit) {

    @helper.inputText(myForm("username"))

    @helper.inputPassword(myForm("password"))

}

我仍然是一个n00b。但据我了解,这基本上需要在控制器中定义一个表单对象,它“包装”模型(简化):

  val loginForm = Form(
    tuple(
      "email" -> text,
      "password" -> text
    ))
  )

  def login = Action { implicit request =>
    Ok(html.login(loginForm))
  }

我发现这很令人惊讶,因为我感觉通过Form对象的间接似乎“在错误的地方”。我期待的是这样的(伪):

@(user: User)

@helper.form(action = routes.Application.submit) {

    @helper.inputText(() => user.userName)
    @helper.inputPassword(() => user.password)
}

...这样就不必在控制器中定义Form对象;所有与表单相关的内容都将位于视图模板中。 将“这将被渲染成形式”的逻辑混合到控制器中似乎是对我的一点点违反SOC。

现在我想知道:这是Play中的事情,还是我错过了什么?是否有一种“更好”的方式来处理这个问题?

干杯,亚历克斯

1 个答案:

答案 0 :(得分:1)

我认为控制器中的许多表单定义也会很烦人,尤其是应用程序将涉及多种形式。

但Play!Framework使开发人员能够更灵活地编写代码。您可以在scala模板助手中混合使用纯HTML,如下所示:

@helper.form(action = routes.Application.submit) {
   <input type="text" name="username">
   <input type="password" name="password">

   ....
}

在我看来,scala帮助器实际上有助于使用表单来更新之前创建的数据。因为它会将现有值绑定到默认输入值。此外,它还有助于显示由对象验证引起的错误。

如果表单不被认为是以前的值,比如登录表单,我认为使用纯HTML输入会被认为更好。