【问题标题】:Strongly typed form fields in Play Framework viewsPlay Framework 视图中的强类型表单字段
【发布时间】:2013-10-11 17:49:09
【问题描述】:

我们必须使用属性名称作为字符串在 Play Framework 视图中呈现 HTML 字段:

斯卡拉:

case class MyClass(myField: Int)

查看:

@(form: Form[MyClass])
...
@helper.inputText(form("myField"), '_label -> "Field Title")

这不是强类型

那么有没有办法以强类型的方式提及字段名称? 像这样:

@helper.inputText(form(model => model.myField), '_label -> "Field Title")

我确信这在 Scala 中是可能的,但幸运的是我们有宏,并且这样的代码可以在没有任何运行时开销的情况下实现。

【问题讨论】:

    标签: scala playframework playframework-2.0


    【解决方案1】:

    不要将字符串视为属性的名称,而应将其视为字符串的表单字段 id/name,因为 Form 建模的是表单而不是对象(可能甚至对使用元组作为数据结构的表单建模非常有用)。这确实是强类型的,因为您只能在其中发送字符串。

    不过,您的问题是您希望更多地使用类型系统,将实际值编码为类型或避免拼写错误等的东西。

    我认为您可以采取一些方法,有各种收获和问题:

    • 编写自己的表单 api 并使用类型系统以某种方式识别字段 ID
    • 在项目中强制使用常量作为键,而不是使用类型系统,而是决定这样做
    • 为表单构建器和表单助手编写自己的包装器,接受一些更受限制的类型作为键
    • 将您的模型字段表示为某种“属性”类型,并将其与表单构建器和表单助手的自定义包装器相结合。

    这些都不是真正内置的,除了常量方法之外,所有方法都会让你编写或多或少复杂的代码,所以你必须权衡解决这个问题的实际收益对你的价值。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多