Frage Geschweifte Klammern in JavaScript in der Play Framework-Vorlage verwenden


Ich habe eine Liste von Titeln übergeben, die ich von meinem Controller erhalten habe:

@titles:List[String]

Ich möchte einige HTML-Überschriften erzeugen, wobei {mmm} erscheint:

@titles.map { title =>
  <h1>{title} {mmm}</h1>
}

Offensichtlich gibt es ein Problem, da es versuchen wird, eine Variable namens mmm zu finden. Wie entkomme ich den Klammern?

Oder gibt es einen idiomatischen Weg, den HTML-Code zu generieren, der keine Zuordnung der Liste beinhaltet? Sehr neu dazu!


5
2017-07-19 16:44


Ursprung


Antworten:


Sie sollten den geschweiften Klammern in Play nicht entkommen müssen - anders als in den XML-Literalen von Scala haben sie in Play-Vorlagen keine besondere Bedeutung, außer nach einem @.

Sie sollten in der Lage sein, Folgendes zu schreiben:

@titles.map { title =>
  <h1>@{title} {mmm}</h1>
}

Und bekomme <h1>Whatever Title {mmm}</hq>, etc.


4
2017-07-19 17:01



Travis 'Antwort zeigt eine Möglichkeit (für die Sie gebeten haben) und es ist korrekt. Auf der anderen Seite können Sie auch andere Fälle treffen und Sie müssen andere Tricks beachten:

für ein Beispiel dies wird versagen:

@for(title <- titles){
    Title: @title {mmm} <br/>
}

Aber dieses wird funktionieren (Danke Travis)

@for(title <- titles) { 
    Title: @{title} {mmm} <br/> 
}

Und das wird funktionieren auch

@for(title <- titles){
    Title: @title - <b>something else without bracets</b> <br/>
}

Alternative

Alternativ können Sie für ein Beispiel erstellen toBrackets() Methode in Ihrem Modell und rufen Sie es in Ihrer Vorlage (Java-Beispiel)

public String toBrackets(String string) {
    return "{" + string + "}";
}

in Vorlage:

@for(title <- titles){
    Title: @title @title.toBrackets("mmm") <br/>
}

3
2017-07-19 17:53



Wenn es nicht Teil von JS oder anderem Code ist und nur zur Darstellung in der Ansicht verwendet wird, können wir HTML-Berechtigungen verwenden

&#123; for left curly brace
&#125; for right curly brace

Das Ergebnis:

{ for left curly brace
} for right curly brace

3
2017-11-11 13:56



Sie könnten Variablen erstellen @LeftBracket = { und @RightBracket = }und dann sollte das funktionieren:

@titles.map { title =>
  <h1>{title} @{LeftBracket}mmm@RightBracket</h1>
}

Eine Randnotiz, die etwas mit Ihrer Frage zu tun hat:

Mein Eindruck ist, dass, wenn die Klammern nicht übereinstimmen (d. H. A } für jede {),
Vorlagenkompilierung schlägt fehl, also vielleicht @RightBracket ist die einzige Möglichkeit, eine einzelne einzufügen }? Dies wäre nützlich, falls Sie schreiben müssen:

@titles.map { title =>
   hello :-}
}

: -}


1
2017-10-10 08:29