2012-04-18 3 views
2

Используя документ, я могу установить свой собственный помощник для макета, передающего мое поле, но я бы хотел персонализировать также некоторые поля, заданные игрой.Можно ли переопределить формы?

Основной причиной для 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> 

Как я могу это сделать? Спасибо за помощь!

ответ

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) } 

И вуаля! Оно работает!

+0

Это работает. Благодарю. – masterdany88

5

Будет проще просто написать собственный тег с кодом, который вы хотите, и использовать его вместо предоставленного помощника. Это упростит потенциальные проблемы, связанные с перезаписыванием тегов платформы.

+1

Да, вы правы, это хороший путь. Я попробую! Благодаря! –

Смежные вопросы