3

我刚开始使用 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 对象;所有与表单相关的东西都将位于视图模板中。将“this-will-be-rendered-in-a-form”逻辑混合到控制器中对我来说似乎是对 SOC 的轻微违反。

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

干杯,亚历克斯

4

1 回答 1

1

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

但是 Play!Framework 使开发人员编写代码更加灵活。您可以像这样在 scala 模板助手中混合纯 HTML:

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

   ....
}

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

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

于 2013-04-08T15:09:19.257 回答