gpt4 book ai didi

scala - 玩!框架表单/HTML 助手 : Separation of Concerns?

转载 作者:行者123 更新时间:2023-12-04 15:53:49 24 4
gpt4 key购买 nike

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

@(myForm: Form[User])

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

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

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

}

我仍然对此一无所知。但据我所知,这基本上需要在 Controller 中定义一个表单对象,它“包装”模型(简化):

  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)
}

...这样就不必在 Controller 中定义 Form 对象;所有与表单相关的内容都将位于 View 模板中。将“this-will-be-rendered-into-a-form”逻辑混合到 Controller 中对我来说似乎是对 SOC 的轻微违反。

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

干杯,亚历克斯

最佳答案

我认为在 Controller 中定义很多表单也会很烦人,尤其是应用程序会涉及很多表单。

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

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

....
}

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

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

关于scala - 玩!框架表单/HTML 助手 : Separation of Concerns?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15881979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com