2

我们必须使用属性名称作为字符串来在 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 中是可能的,但幸运的是我们有宏,这样的代码可以在没有任何运行时开销的情况下实现。

4

1 回答 1

2

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

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

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

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

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

祝你好运!

于 2013-10-11T09:49:09.620 回答