Kann ich bedingte Anweisungen mit EJS-Vorlagen (in JMVC) verwenden?

101

und wenn ja, wie lautet die Syntax? Mein Ziel ist es, dem Wort "Kommentar" ein "s" voranzustellen, wenn es mehr als ein Wort gibt. in einer jQuery.ejs-Vorlage in einer JMVC-App. Die folgenden Pausen. Ich kann keine Dokumente für Bedingungen finden ...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>
Regis Zaleman
quelle
Ihre Syntax sieht richtig aus und funktioniert für mich. Sind Sie sicher, dass var commentNumber existiert und eine Ganzzahl ist?
Ryan Crispin Heneise
1
Ja, seltsam, dass Bedingungen in den Dokumenten nicht erwähnt werden!
UpTheCreek

Antworten:

170

Für andere, die darüber stolpern, können Sie auch ejs params / props in bedingten Anweisungen verwenden:

rezepte.js Datei:

app.get("/recipes", function(req, res) {
    res.render("recipes.ejs", {
        recipes: recipes
    });
});

rezepte.ejs Datei:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>
Jbird
quelle
3
Können Sie im Falle einer includeAnweisung die bedingte Inline schreiben? Das Schreiben <% if (true) { include foo/bar } %>scheint ein Fehler zu sein. Gibt es eine ähnliche Methode oder ist es notwendig, die includedurch auszubrechen <% %>.
Kuanb
Danke, ich habe nach dieser Antwort gesucht, bevor ich sie ausprobiert habe.
CTala
Danke dir! Ich habe versucht, bedingte Elemente aus Änderungen auf dem Server anzuzeigen. Ihre Antwort hat mir gezeigt, dass ich alles auf dem Client bewerten muss.
Buildpax
161

Bedingungen funktionieren, wenn sie richtig strukturiert sind. Ich bin auf dieses Problem gestoßen und habe es herausgefunden.

Für Bedingungen muss das elsevorherige Tag mit dem End-Tag des vorherigen gekoppelt werden, ifandernfalls werden die Anweisungen separat ausgewertet und erzeugen einen Fehler.

ERROR!

<% if(true){ %>
   <h1>foo</h1>
<% } %>
<% else{ %>
   <h1>bar</h1>
 <% } %>

Richtig

<% if(true){ %>
   <h1>foo</h1>
 <% } else{ %>  
   <h1>bar</h1>
<% } %>

hoffe das hat geholfen.

StanleyZheng
quelle
2
Vielen Dank !! Das hat mich eine Weile festgehalten.
Xblymmx
3
Dies war unglaublich hilfreich, da ich auf ein Problem stieß, bei dem ich meine elsein eine andere Zeile stellte, wie den ersten von Ihnen erwähnten Codeblock. Vielen Dank für die Aufnahme dieser Beispiele!
Michael Platt
22

EJS scheint sich unterschiedlich zu verhalten, je nachdem, ob Sie die {} Notation verwenden oder nicht:

Ich habe geprüft und die folgende Bedingung wird wie erwartet bewertet:

<%if (3==3) {%>  TEXT PRINTED  <%}%>
<%if (3==4) {%>  TEXT NOT PRINTED  <%}%>

während dieser nicht:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  
Kristóf Aczél
quelle
11
Würden Sie erwarten, dass ein einzelnes Leerzeichen etwas tut?
UpTheCreek
22

Ja, Sie können mit EJS eine bedingte Anweisung verwenden, z. B. einen ternären Operator oder sogar einen Groß- / Kleinschreibung

Beispielsweise

Ternärer Operator : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Schaltergehäuse

<% switch (role) {
case 'Admin' : %>
        Super Admin
        <% break;

case 'eventAdmin' : %>
        Event Admin
        <% break;

case 'subAdmin' : %>
        Sub Admin
        <% break;

} %>
Om Sharma
quelle
16

Sie können auch die else ifSyntax verwenden:

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>
pzrq
quelle
4
Was Sie hier hervorheben müssen, ist, dass die schließende Klammer definitiv in der gleichen Zeile wie else / else verwendet werden muss, wenn
Paulo
1

Ich weiß, das ist eine etwas späte Antwort.

Sie können if- und else-Anweisungen in ejs wie folgt verwenden

<% if (something) { %>
   // Then do some operation
<% } else { %>
   // Then do some operation
<% } %>

Aber es gibt noch eine andere Sache, die ich hervorheben möchte: Wenn Sie den Code auf diese Weise verwenden,

<% if (something) { %>
   // Then do some operation
<% } %>
<% else { %>
   // Then do some operation
<% } %>

Es wird ein Fehler erzeugt.

Hoffe das wird jemandem helfen

Achintha Isuru
quelle