2013-04-10 79 views
3

我想在scala文档中构建一个自定义FieldConstructor。PlayFramework 2.1中的多个FieldConstructor?

我按照指示,建立一个twitterBootstrapInput.scala.html, 和它的作品...

这是我的输出:

output screenshot

这里谈到的问题:

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

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

但我不知道如何修改模板不会感染其他“文本框”?

我应该定义另一个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")) 
) 

========月/ 11更新==============

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

enter image description here

和输出HTML源代码是:

enter image description here

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

回答

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是斯卡拉单独的对象下面的代码语句是相同的:

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

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

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

但你可以明确的参数覆盖它:如果你使用Scala的控制器模板需要郎额外的参数列表

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

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

你不能有两个隐FieldConstructors在模板中。

+0

嗨,谢谢你指导我的第一步。但输出仍然是垂直的。如何修改'@ elements.input'模板? (我更新了我的问题,附加代码和屏幕截图) – smallufo 2013-04-11 10:39:05

+0

@smallufo我想这是一个CSS问题。 '

+0

谢谢,它的工作原理。覆盖显示:块以显示:内联后,无线电横向跨越。但我仍然想知道如何修改'elements.input'模板?任何文件? – smallufo 2013-04-12 02:57:20