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

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

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.


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

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;

} %>

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.