2013-06-17 11 views
5

Mam formularz renderowany przez serwer, który korzysta z szablonów wąsów. Po przesłaniu formularza, jeśli wystąpi błąd, ponownie wyświetlam formularz wraz z błędami. Chcę, aby pola zostały ponownie wypełnione tymi samymi wartościami, które zostały przesłane.Korzystanie z szablonów wąsów, zaznacz odpowiednią opcję na liście wyboru zgodnie z wybraną opcją

Jednak nie jestem pewien, jak oznaczyć właściwy element z listy wyboru. Oto moje dane:

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

I użyć szablonu tak:

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

W tym przykładzie, będę oczekiwać druga opcja w select mieć atrybut selected. Wolałbym nie używać JavaScript w tym przypadku. Jakieś sugestie?

Podoba mi się koncepcja szablonów bez logiki, dostarczanych przez Moustache, ale wciąż pakuję głowę w rzeczywiste szczegóły.

w narzędziu trochę więcej logiki, na przykład szablonów Django, mogę powiedzieć:

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

Dzięki za wszelkie wskazówki.

Odpowiedz

5

Wąsy nie są całkowicie pozbawione logiki. To tylko głównie bez logiki.

mieć pole modelu dla każdego wiersza o nazwie „wybrany” i wyjście tylko to tak:

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

model wyglądałby następująco (jest to Java BTW, można zrobić to samo w cokolwiek :

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

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

Dzięki, myślę, że odpowiedź brzmi, że muszę inaczej myśleć o moich danych. W pewnym sensie komplikuje to mój kod po stronie serwera w celu uproszczenia kodu po stronie klienta. Czasami może to być trudne. – newz2000

+0

Tak i nie. W rzeczywistości możesz połączyć logikę ze stroną klienta danych tuż przed renderowaniem szablonu. Właściwie prawie zawsze robię to, zamiast przechodzić json prosto w wąsy. – bobthecow

1

oparciu o sugestie ryber dodałem bibliotekę do obsługi tego jak dobrze obejmuje ona kilka adnotacji (aktualizowane dokumenty przygotowaniu)

0123.

Powiązane problemy