3

我正在尝试在 scala 文档中构建自定义 FieldConstructor。

我按照说明,建立一个twitterBootstrapInput.scala.html,它的工作原理......

这是我的输出:

输出截图

问题来了:

我想要@helper.inputRadioGroup“水平”的跨度,而不是垂直的。

(因为块中的twitterBootstrapInput.scala.html扭曲)@elements.input<div>

但我不知道如何在不感染其他“文本字段”的情况下修改模板?

我应该定义另一个implicitFieldConstructor 吗?还是做点别的?

我找不到有关如何解决此问题的示例...

所有的自定义模板文档都太少见了……

有人可以给我一个例子吗?谢谢 !

这是我的代码(播放 2.1):

@import views.html.helper.FieldConstructor
@implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.f) }

@helper.inputRadioGroup(consultForm("currency") 
  , options = Seq(
    "USD" -> "USD" 
  , "HKD" -> "HKD" 
  , "RMB" -> "RMB") 
  , '_label -> "Currency" 
  , '_error -> consultForm("currency").error.map(_.withMessage("select currency"))
)

======== 2011 年 4 月更新 ===============

感谢@Schleichardt 让我迈出了第一步。(FieldConstructor(twitterBootstrapRadioGroup.f) , lang)我在 之后追加inputRadioGroup,它似乎有效。但是,即使我@elements.input在模板中写了最简单的(没有其他装饰),它仍然是垂直跨越的。如下截图:

在此处输入图像描述

输出的html源代码是:

在此处输入图像描述

如何修改<span class="buttonset" ...>块?我不应该调用@elements.input模板吗?

4

1 回答 1

6

精简版:

@(consultForm: Form[Consult])(implicit lang: play.api.i18n.Lang)

@import views.html.helper.FieldConstructor
@implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.f) }

@* uses twitterBootstrapInput */
@helper.inputText(consultForm("name"))

@* uses anotherFieldConstructor */
@helper.inputRadioGroup(consultForm("currency") 
  , options = Seq(
    "USD" -> "USD" 
  , "HKD" -> "HKD" 
  , "RMB" -> "RMB") 
  , '_label -> "Currency" 
  , '_error -> consultForm("currency").error.map(_.withMessage("select currency"))
)(FieldConstructor(anotherFieldConstructor.f), lang)


@* uses twitterBootstrapInput */
@helper.inputText(consultForm("anotherFormFieldName"))

anotherFieldConstructor是您必须创建的附加 FieldConstructor。它应该根据您的需要放置单选按钮。

长版:

inputRadioGroup 的 API 文档在这里:http ://www.playframework.com/documentation/api/2.1.0/scala/index.html#views.html.helper.inputRadioGroup $

由于 inputRadioGroup 是一个 Scala 单例对象,因此以下代码语句是相同的:

helper.inputRadioGroup(consultForm("currency") /* etc. */)
helper.inputRadioGroup.apply(consultForm("currency") /* etc. */)

inputRadioGroup 的 apply 方法有两个参数列表。第二个列表使用隐式参数。

@implicitFieldConstructor = @{ FieldConstructor(twitterBootstrapInput.f) }指定后,twitterBootstrapInputFieldConstructor 是 inputRadioGroup 的第二个参数列表中处理程序的“默认参数” 。

但是您可以使用显式参数覆盖它:

helper.inputRadioGroup(consultForm("currency") /* etc. */)(FieldConstructor(anotherFieldConstructor.f), lang)

如果您使用 Scala 控制器,则模板需要额外的 lang 参数列表:

@(consultForm: Form[Consult)])(implicit lang: play.api.i18n.Lang)

模板中不能有两个隐含的 FieldConstructor。

于 2013-04-10T22:39:11.250 回答