- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
由于 Play 模板层缺乏泛型支持,因此遇到了 catch 22 的情况。
我有几个购物车屏幕,它们都需要一个用户和一个付款 + 可选的自定义字段。
case class Conference(
user: User,
payment: Payment
... custom fields here
)
@(_form: Form[Conference])
@user.nested( UserForm.form.fill(_form.get.user) )
@payment.nested( PaymentForm.form.fill(_form.get.payment) )
@(_form: Form[User])
@inputText(_form("user.firstName"), '_label-> "First Name*", 'class-> "required")
@inputText(_form("user.lastName"), '_label-> "Last Name*", 'class-> "required")
...
case class User(firstName: String, lastName: String ...)
def apply(key: String): Field = Field(
this,
key,
constraints.get(key).getOrElse(Nil),
formats.get(key),
errors.collect { case e if e.key == key => e },
data.get(key))
data.user.firstName
这显然是行不通的。
case class User(firstName: String, lastName: String ...) {
val user: User
}
trait CartOrder {
user: User,
payment: Payment
}
case class Conference(...) extends CartOrder
@[T <: CartOrder](_form: Form[T])
@inputText(_form("user.firstName"), '_label-> "First Name*", 'class-> "required")
...
最佳答案
如果类型安全不是问题( Form
并不是所有类型安全的开始),您可以使用 Form[_]
作为嵌套模板的参数类型。
如果您确实想要类型安全,一种选择是为 Form 制作一个协变的包装类,并使用它来代替 Form。一种实现是:
package views.html
import play.api.data._
import play.api.libs.json.JsValue
object FormView {
implicit def formToFormView[A, T >: A](form: Form[A]): FormView[T] = new FormView[T] {
type F = A
def realForm = form
}
}
trait FormView[+T] {
type F <: T
def realForm: Form[F]
def apply(key: String): Field = realForm(key)
def constraints : Map[String, Seq[(String, Seq[Any])]] = realForm.constraints
def data: Map[String, String] = realForm.data
def error(key: String): Option[FormError] = realForm.error(key)
def errors(key: String): Seq[FormError] = realForm.errors(key)
def errors: Seq[FormError] = realForm.errors
def errorsAsJson: JsValue = realForm.errorsAsJson
def get: T = realForm.get
def formats: Map[String, (String, Seq[Any])] = realForm.formats
def globalError: Option[FormError] = realForm.globalError
def globalErrors: Seq[FormError] = realForm.globalErrors
def hasErrors: Boolean = realForm.hasErrors
def hasGlobalErrors: Boolean = realForm.hasGlobalErrors
override def hashCode: Int = realForm.hashCode
def mapping: Mapping[F] = realForm.mapping
def value: Option[T] = realForm.value
}
@(_form: Form[CartOrder])
@(_form: FormView[CartOrder])
Form[T]
哪里
T
是
CartOrder
的子类型喜欢
@user.nested(_form)
关于forms - 没有泛型的嵌套对象支持 : workarounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11903593/
出于某种原因,有两个 div带有 ID 的“cye-workaround-body”和“cye-workaround-body-image”,它们被添加到 下面一些网站,它在页脚下方创建了一个大空间
我已经有了一个解决方案,但只适用于 JavaScript。不幸的是,Twig 中不存在 while 循环。 我在 JavaScript 中的 Twig-target: var x = 10; // t
由于 Play 模板层缺乏泛型支持,因此遇到了 catch 22 的情况。 我有几个购物车屏幕,它们都需要一个用户和一个付款 + 可选的自定义字段。 case class Conference(
我正在阅读一篇关于“Scott Meyers 的双重检查锁定的危险”的论文。 http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf 作
following example适用于 Firefox 4,但不适用于 Internet Explorer 8: HTML: A B C CSS: div:not(.first) { col
我正在使用 markdonw v2,rmarkdown包裹。在整个 .Rmd 文件中,我创建了指向网站或图像的链接 [Link1][pathLink1] ![Image1][pathImage1] 然
众所周知,在 C 中作为参数传递时,数组会退化为指针。但是数组的数组只会退化为数组的指针;因此,如果我们将原始数组本身包含在一个数组中,我们可以在将封闭数组传递给函数后检索原始数组长度。这是一个测试这
使用Python watchdog文件系统事件监视库我注意到,在 Windows Server 2003 下使用时,它会进入“轮询模式”,从而停止使用异步操作系统通知,因此,在大量文件更改下会严重降低
是否有任何 IE 的变通方法使我能够使用 border-image?我正在开发一个网站,它在除 IE 之外的所有浏览器中都能正常工作。我需要模仿这些酒吧 我可以使用 ie-css3.htc hack
这是我的场景:我有一系列 Activity .我对那些 Activity 设置了超时这将断开用户的连接,以防它暂时处于非 Activity 状态。但我想将用户重定向到最后一个屏幕,以防他登录 当我断开
目前,我的主要网站上有 50 多个微型网站。也就是说,我有一个主要的顶级域,并且在该域的子文件夹中有 50 多个微型站点(并且还在不断增长)。 以前,我为单独的微型站点(不同的 GA 跟踪 ID)使用
好的,所以这个问题主要与:有没有更好的方法来做到这一点? 我有一个电话簿应用程序,您可以向其中添加用户、删除用户等,并且为每个人分配一个不同的 ID#。 Person 类将 lastIDused 存储
当 float 元素有边距时,我遇到了 WebKit 渲染 float 元素宽度的错误。 以下呈现在 Firefox (3.6) 和 WebKit (Chromium 5.0) 中的预期效果:
我在 iframe 外部有一个可拖动的东西,在其中有一个可放置的目标。在这里,我将 iframe 显示为包含由其 src 属性加载的 HTML 片段。 我使
考虑 3 个表 - Student(Id INT NOT NULL PRIMARY KEY, Name VARCHAR(100)); Test(Id INT NOT NULL PRIMARY KEY,
我发现 LESS 有一个有问题的 JavaScript 求值器,至少我使用它的方式是这样,即在将 *.less 文件上传到 Web 服务器之前在客户端将它们编译成 *.css。 我知道编译可能更经常在
有这个 where 子句: 第一个和第二个占位符?可以有值: 1 || NULL 第三个占位符是动态添加的(数组) IF(ISNULL(?),1,xy.id) IN (IF(ISNULL(?
我试图仅在页面投影到墙上时(通过投影仪,当有人进行演示时)才将样式应用于页面。目前,我只能在全屏模式下在 Opera 中获得它。 有没有办法让@media projection在其他浏览器中生效?另外
所以我正在尝试将动画 CSS 放入电子邮件签名中。我让它在 iOS/Mac 电子邮件客户端中工作,但 Gmail 和 Outlook 似乎阻止了部分代码。有没有人知道解决方法? 我现在在电子邮件中使用
我目前在 chrome 中使用伪选择器 :focus-within 但是根据 caniuse.com它在 Edge 和 IE 中不可用,我找到了一个巧妙的解决方法: .focus-within-cla
我是一名优秀的程序员,十分优秀!