2012-04-18 20 views
18

Ho ancora problemi con la convalida del modulo e la creazione di helper in Play 2.0. Ho questa schermata di login che uso insieme a Twitter Bootstrap. Quindi il mio form di login simile a questa:Modulo di convalida e modulo helper

@helper.form(routes.Application.authenticate, 'class -> "form-horizontal") { 
    <fieldset> 
    <legend>@Messages("login")</legend> 

      @if(loginForm.hasGlobalErrors) { 
       <div class="alert alert-error"> 
       <a class="close" data-dismiss="alert">×</a> 
        @loginForm.globalError.message 
       </div> 
      } 
      @if(flash.contains("success")) { 
       <div class="alert alert-success"> 
       <a class="close" data-dismiss="alert">×</a> 
        @flash.get("success") 
       </div> 
      } 

      @inputText(loginForm("email"), '_label -> "Email") 
      @inputText(loginForm("password"), '_label -> Messages("login.password")) 


      <div class="form-actions"> 
       <button type="submit" class="btn btn-success">@Messages("button.doLogin")</button> 
       @Messages("or") 
       <a class="btn btn-warning" href="routes.LandingPage.index">@Messages("button.doCancel")</a> 
      </div>    
    </fieldset> 
    } 

E mio twitter bootstrap campo assomiglia seguenti:

@(elements: helper.FieldElements) 

@************************************************** 
* Generate input according twitter bootsrap rules * 
**************************************************@ 
<div class="control-group @if(elements.hasErrors) {error}"> 
    <label class="control-label" for="@elements.id">@elements.label</label> 
    <div class="controls"> 
     @elements.input 
     <span class="help-inline">@elements.infos.mkString(", ")</span> 
    </div> 
</div>  

Questa è l'uscita:

Login screen

Quello che non capisco :

1, W hy è il testo della guida visibile tutto te tempo (a destra del campo di immissione)

Il testo aiuto viene dal @elements.infos.mkString(", "). Quindi l'eliminazione di questa riga cancellerà il testo della guida. Oppure puoi passare una stringa vuota per sopprimere il testo della guida visibile: '_help -> ""

2, Come mostrare solo il testo della guida in caso di errore?

testo della guida può essere aggiunto quando si usa questo codice: @elements.errors(elements.lang).mkString(", ")

3, Quali sono i possibili parametri da passare a un campo di testo di input? Voglio passare il nome della classe pure, ma io non so come ...

posso definire i miei argomenti personalizzati per passare (cioè classe o segnaposto): class="@elements.args.get('_class) e poi posso passare in questo modo: '_class -> "classname"

4, È possibile definire più di uno implicitFieldConstructors in una parte modello? Perché per le caselle di controllo voglio un altro FieldConstructor rispetto alle caselle di input e textarea, ma come fare?

Esempio di questo: Nel campione computer database di un campo di bootstrap Twitter è definito, ma poi si è utilizzato come segue:

@inputText(loginForm("email"), '_label -> "Email") 

Perché il nome qui inputText e non solo in ingresso? Perché c'è anche un input.scala.html?

Quindi, se voglio creare un fieldhandler per la casella di controllo, come usare questo? Il seguente formato mi sta dando errori:

@checkBoxHandler = @{ FieldConstructor(s2ftheme.constructors.checkbox.render) } 
@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor) 

ricevo il seguente messaggio di errore:

not enough arguments for method apply: (implicit handler: views.html.helper.FieldConstructor, implicit lang: play.api.i18n.Lang)play.api.templates.Html in object checkbox. Unspecified value parameter lang. 

penso che mi manca il concetto qui ... Grazie.

risposta

10

Il testo informativo viene da @elements.infos.mkString(", "). Per mostrare gli errori, dovresti usare invece @elements.errors(elements.lang).mkString(", ").

Il parametro corretto per modificare il contenuto informazioni sarebbe aiuto (questo è un po 'incoerente, si deve leggere la fonte per rendersene conto), quindi se si desidera utilizzare il built-in campi di bootstrap, ma sopprimere le informazioni , passeresti '_help -> "".

Modifica per 4 #:

Ecco come si dovrebbe chiamare il casella di controllo specifica:

@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor, implicitly[Lang])

E sì, @input significa che c'è un modello chiamato input.scala.html. È il modello base per tutti gli helper di input.

Per capire perché e come funziona, dovresti approfondire un po 'di più su Play 2.0 e Scala (in particolare argomenti impliciti).

+0

Ok, ha più senso, posso anche fornire un FieldConstructor implicito diverso per dire una casella di controllo, perché per la casella di controllo voglio un markup diverso? – adis

+0

Come si genera la chiave di traduzione? Se voglio tradurre il testo "Questo campo è richiesto"? – adis

+0

È possibile passare il costruttore di campi alla casella di controllo '@. –

1
  1. A causa di questa riga <span class="help-inline">@elements.infos.mkString(", ")</span>. Stai visualizzando le informazioni sul campo lì. Rimuovilo per non visualizzare le informazioni.
  2. aggiungere questo codice:

    @if(elements.hasErrors) { 
        <span class="help-inline">@elements.infos.mkString(", ")</span> 
    } 
    
  3. Per impostare il nome di classe: Aggiungi al vostro campo Twitter Bootstrap: class="@elements.args.get('_class). E nel tuo form di login aggiungere il parametro di classe, come questo: @inputText(loginForm("email"), '_label -> "Email", '_class -> "classname")

Per capire il concetto, dare un'occhiata al codice sorgente: https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/views/helper/defaultFieldConstructor.scala.html

0

Sono nella stessa battaglia per mostrare gli errori :) per ora sto usando:

<span class="errors badge badge-important">@elements.errors.mkString(", ")</span> 

che sarebbe nascosto se non ci sono errori, dare un'occhiata a questo: http://twitter.github.com/bootstrap/components.html#labels-badges

ma ancora in cerca di un modo per tradurre "Richiesto" in portoghese.

Problemi correlati