2016-04-06 2 views
2

Ich versuche, das href-Attribut dieses HTML-Anchor-Tag mit einem Scala-Parameter zu fahren und kann nicht scheinen, um es zu arbeiten.Spielen Scala Vorlage Syntax für eine Zeichenfolge

@{ 
    val key = p.getKey() 
    if(key == "facebook") { 
    <a href="/authenticate/@(key)">Sign in with facebook</a> 
    } else if (key == "twitter"){ 
    <a href="/authenticate/{key}"> 
     <span>Sign in with twitter {key} (this works)</span> 
    </a> 
    }  
} 

In beiden Beispielen das href Attribut zu erzeugen ist nicht richtig, aber wenn ich {key} in der span-Tag verwenden, die außerhalb des HTML-Attribut ist, druckt es richtig den Schlüssel aus.

+0

Haben Sie '@ {key}'? Sie verwenden im ersten 'href'-Beispiel Klammern und im zweiten kein' @ '. – Eric

Antwort

1

Twirl unterstützt else-if nicht. Da Sie Probleme verursacht haben, haben Sie es in einen dynamischen Block @{} eingepackt, den Sie arbeiten können, denke ich (nie ausprobiert). Normalerweise werden diese Schritte jedoch nicht ausgeführt, stattdessen wird stattdessen die Mustererkennung verwendet.

Hier ist, wie Ihr Code aussehen könnte:

@p.getKey() match { 
    case "facebook" => { 
     <a href="/authenticate/@{p.getKey()}">Sign in with facebook</a> 
    } 
    case "twitter" => { 
     <a href="/authenticate/@{p.getKey()}"> 
      <span>Sign in with twitter - key @{p.getKey()} </span> 
     </a> 
    } 
} 

Nun, das funktioniert, aber Sie können auch mit defining wiederverwendbaren scoped Werten definieren (statt vals) auf der Vervielfältigung von p.getKey zu senken und der href selbst:

@defining(p.getKey()) { key => 
    @defining(s"/authentication/$key") { href => 
     @key match { 
      case "facebook" => { 
       <a href="@href">Sign in with facebook</a> 
      } 
      case "twitter" => { 
       <a href="@href"> <span>Sign in with twitter - key @key</span> </a> 
      } 
     } 
    } 
} 

Wenn angenommen wird, dass die Nachricht ist alles gleich, außer für den Schlüssel wird es noch einfacher, Schrott das pattern-Matching und die href definieren (seit seinem nur einmal verwendet):

@defining(p.getKey()) { key => 
    <a href="/authentication/@key">Sign in with @key</a> 
}