3

ドキュメントを使用して、自分のフィールドを放棄するレイアウト用に独自のヘルパーを設定できますが、プレイによって提供されるいくつかのフィールドもパーソナライズしたいと思います。

主な理由は、変更する必要がある Twitter Bootstrap 2 のためです (checkbox.scala.html で)

@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>

どうやってやるの ?ご協力いただきありがとうございます!

4

2 に答える 2

8

私は最終的にこのようにしました:

以下を含むパッケージviews.helpers.formを作成しました:

ブートストラップ.scala.html:

@(elements: helper.FieldElements)

<div class="control-group@if(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>

チェックボックス.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) }

そしてほら!できます!

于 2012-04-18T12:38:47.567 に答える
6

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

于 2012-04-18T10:07:11.893 に答える