2016-05-29 6 views
0

Meine Vorlage sieht wie folgt zur Zeit:Wie rendert man die korrekte CSS-Klasse basierend auf einer Eigenschaft?

{{range .Users}} 
<div ...> 
    <div class="row XXXX"> 
</div> 
{{end}} 

Das hat XXX mit einer CSS-Klasse ersetzt werden, die auf eine Eigenschaft des Benutzer Struktur, die Userlevel ist eine Zeichenfolge basiert.

Also je nach dem Wert der Userlevel, werde ich die richtige CSS-Klasse an:

Userlevel ist „beg“ dann habe ich die Ausgabe „Anfänger“ benötigen. Userlevel ist „int“ dann habe ich die Ausgabe „intermediate“ benötigen usw.

Ich weiß, ich kann nur die CSS-Klasse benennen Sie den Wert der Eigenschaft übereinstimmen, aber ich will nicht eine enge Kopplung halten zwischen die 2.

Ist das irgendwie möglich, da Ausdrücke in if-Anweisungen nicht erlaubt sind?

Antwort

1

Es gibt mehrere Möglichkeiten, das zu tun, ich werde zwei abdecken. Erster Weg ist, mit zu arbeiten, wenn Aussagen und Gleichheitstests in der Vorlage:

{{range $count, $user := .Users}} 
<div ...> 
    <div class="row {{if eq $user.UserLevel "beg"}}beginner{{else if eq $user.UserLevel "int" }}intermediate{{else}}default{{end}}"> 
</div> 
{{end}} 

Der zweite Weg ist eine Funktion für den Benutzer zu definieren, die die richtige Klasse gibt auf der Grundlage der UserLevel Eigenschaft:

func (u User) CssClass() string { 
    switch u.UserLevel { 
    case "beg": 
     return "beginner" 
    case "int": 
     return "intermediate" 
    default: 
     return "" 
    } 
} 

{{range $count, $user := .Users}} 
<div ...> 
    <div class="row {{$user.CssClass}}"> 
</div> 
{{end}} 

Ich habe diesen kleinen Testcode in die Go playground, beide produzieren die gleiche Ausgabe mit der richtigen Klasse.