2013-06-17 7 views
5

Ho un modulo reso server che utilizza i modelli di baffi. Quando viene inviato il modulo, se si verifica un errore, visualizzo nuovamente il modulo insieme ad alcuni errori. Voglio che i campi vengano ri-compilati con gli stessi valori che sono stati inviati.Utilizzando i modelli di baffi, selezionare l'opzione corretta in un elenco di selezione come selezionato

Tuttavia, non sono sicuro di come contrassegnare l'elemento corretto dall'elenco di selezione. Ecco il mio dati:

errors = {'required': ['name']}, 
fields = {name: 'Matt', option: 'sales'}; 

E io uso un modello come questo:

<form method="post" action="submitform" id="submitform"> 
    <input type="text" id="name" name="name" value="{{fields.name}}"> 
    <select name="contact" id="contact"> 
     <option value="support">Support request</option> 
     <option value="sales">Sales help</option> 
     <option value="press">Press information</option> 
    </select> 
    <button type="submit" name="submit">Send message</button> 
</form> 

In questo esempio, mi aspetto la seconda opzione nella selezione per avere un attributo selected. Preferirei non usare Javascript in questo caso. Eventuali suggerimenti?

Mi piace il concetto di modelli privi di logica, come previsto da Moustache, ma sto ancora avvolgendo la mia mente sui dettagli reali.

In uno strumento con un po 'più di logica, ad esempio i modelli di Django, mi verrebbe da dire:

<option value="sales" {%if fields.option == 'sales'}selected{% endif %}> 

Grazie per eventuali suggerimenti.

risposta

5

Il baffo non è completamente privo di logica. È solo per lo più senza logica.

Avere un campo del modello per ogni riga chiamata "selezionato" e proprio in uscita in questo modo:

<form method="post" action="submitform" id="submitform"> 
    <select name="contact" id="contact"> 
     {{#options}} 
      <option name="{{name}}" {{selected}}>{{name}}</option> 
     {{/options}} 
    </select> 
    <button type="submit" name="submit">Send message</button> 
</form> 

vostro modello sarebbe simile a questa (questo è Java A proposito, si può fare lo stesso in qualunque :

public class Option { 
     public String name; 
     public String selected; 

     public Option(String name, boolean seleted){ 
      this.name = name; 
      this.selected = seleted ? "selected" : ""; 
     } 
    } 
+1

Grazie, penso che la risposta è che ho bisogno di pensare ai miei dati in modo diverso. In un certo senso, questo complica il mio codice lato server al fine di semplificare il mio codice lato client. A volte può essere un difficile compromesso. – newz2000

+0

Sì e no. È possibile mescolare in realtà alcune logiche sul lato client dei dati, appena prima di renderizzare il modello. In effetti, lo faccio quasi sempre piuttosto che passare JSON direttamente nei baffi. – bobthecow

1

sulla base dei suggerimenti da ryber, ho aggiunto una libreria per gestire questo pure Esso comprende alcune annotazioni (documenti aggiornati di prossima pubblicazione)

0123.

Problemi correlati