2012-04-18 12 views
2

ドックを使用して、自分のフィールドを借りてレイアウトするための自分のヘルパーを設定できますが、私はプレイによって与えられたいくつかのフィールドもパーソナライズしたいと思います。フォームヘルパーをオーバーライドすることはできますか?

主な理由は、私が(checkbox.scala.htmlに)変更する必要がTwitterのブートストラップ2、のためである

@input(field, args:_*) { (id, name, value, htmlArgs) => 
    <input type="checkbox" id="@id" name="@name" value="@boxValue" @(if(value == Some(boxValue)) "checked" else "") @toHtmlArgs(htmlArgs.filterKeys(_ == 'value))> 
    <span>@args.toMap.get('_text)</span> 
} 

へ:

<label class="checkbox"> 
    <input type="checkbox" name="@name" id="@id" value="@boxValue" @(if(value == Some(boxValue)) "checked" else "") @toHtmlArgs(htmlArgs.filterKeys(_ == 'value)) /> 
    @args.toMap.get('_text) 
</label> 

どのように私はそれを行うことができますか? ご協力いただきありがとうございます!

答えて

8

私は最終的にそれをやった:私は、パッケージviews.helpers.formを作成

、それが含まれています

bootstrap.scala.html:

@(elements: helper.FieldElements) 

<div class="[email protected](elements.hasErrors) { error}"> 
    <label class="control-label" for="@elements.id">@elements.label(elements.lang)</label> 
    <div class="controls"> 
     @elements.input 
     @elements.infos(elements.lang).map { info => 
      <span class="help-inline">@info</span> 
     } 
     @elements.errors(elements.lang).map { error => 
      <span class="help-block">@error</span> 
     } 
    </div> 

checkbox.scala.htmlを:

@** 
* Generate an HTML input checkbox. 
* 
* Example: 
* {{{ 
* @checkbox(field = myForm("done")) 
* }}} 
* 
* @param field The form field. 
* @param args Set of extra HTML attributes ('''id''' and '''label''' are 2 special arguments). 
* @param handler The field constructor. 
*@ 
@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: helper.FieldConstructor, lang: play.api.i18n.Lang) 

@boxValue = @{ args.toMap.get('value).getOrElse("true") } 

@helper.input(field, args:_*) { (id, name, value, htmlArgs) => 
    <label class="checkbox"> 
     <input type="checkbox" id="@id" name="@name" value="@boxValue" @(if(value == Some(boxValue)) "checked" else "") @toHtmlArgs(htmlArgs.filterKeys(_ == 'value))> 
     @args.toMap.get('_text) 
    </label> 


div> 
</div> 

私のテンプレートでは、私がしなければならないのは、

@import helper.{FieldConstructor, inputText, inputPassword} @** Import the original helpers *@ 
@import helpers.form.checkbox @** Import my helpers *@ 
@implicitField = @{ FieldConstructor(helpers.form.bootstrap.f) } 

そしてvoilà!できます!

+0

それは動作します。ありがとう。 – masterdany88

5

あなたが望むコードで独自のタグを作成し、提供されたヘルパーの代わりに使用する方が簡単になります。プラットフォームタグの上書きに関連する潜在的な問題を簡素化します。このよう

+1

ええ、そうです、それは良い方法です。私はそれを試してみます!ありがとう! –

関連する問題