Czy mogę używać instrukcji warunkowych z szablonami EJS (w JMVC)?

101

a jeśli tak, jaka jest składnia? Moim celem jest dodanie litery „s” do słowa „komentarz”, gdy jest ich więcej. w szablonie jQuery.ejs w aplikacji JMVC. Następujące przerwy. Nie mogę znaleźć żadnych dokumentów warunkowych ...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>
Regis Zaleman
źródło
Twoja składnia wygląda dobrze i działa dla mnie. Czy na pewno istnieje zmienna commentsNumber i jest liczbą całkowitą?
Ryan Crispin Heneise
1
Tak, dziwne, że warunki warunkowe nie są wymienione w dokumentach!
UpTheCreek,

Odpowiedzi:

171

Dla innych, którzy się na to natkną, możesz również użyć parametrów / rekwizytów ejs w instrukcjach warunkowych:

Receptury.js Plik:

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

recepty.ejs Plik:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>
Jbird
źródło
3
Czy w przypadku includewyciągu możesz wpisać warunkowy inline? To pismo <% if (true) { include foo/bar } %>wydaje się być błędne. Czy istnieje podobna metoda, czy też konieczne jest przełamanie includeprzez <% %>.
kuanb
Dzięki, szukałem tej odpowiedzi, zanim ją wypróbowałem.
CTala,
Dziękuję Ci! Próbowałem wyświetlić elementy warunkowe ze zmian na serwerze. Twoja odpowiedź pokazała mi, że muszę ocenić wszystko na kliencie.
buildpax
161

Warunki warunkowe działają, jeśli mają prawidłową strukturę, natknąłem się na ten problem i rozgryzłem go.

W przypadku warunków warunkowych poprzedni znacznik elsemusi być sparowany z końcowym znacznikiem poprzedniego, w ifprzeciwnym razie instrukcje będą oceniane oddzielnie i spowodują błąd.

BŁĄD!

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

Poprawny

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

mam nadzieję, że to pomogło.

StanleyZheng
źródło
2
Dzięki !! Utknęło mnie to na chwilę.
xblymmx
3
Było to niezwykle pomocne, ponieważ napotkałem problem polegający elsena umieszczaniu mojego w innym wierszu, takim jak pierwszy wspomniany blok kodu. Dziękuję bardzo za dołączenie tych przykładów !!
Michael Platt
22

Wydaje się, że EJS zachowuje się inaczej w zależności od tego, czy używasz notacji {}, czy nie:

Sprawdziłem i następujący warunek jest oceniany zgodnie z oczekiwaniami:

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

podczas gdy ten nie:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  
Kristóf Aczél
źródło
11
Czy spodziewałbyś się, że pojedynczy znak spacji coś zrobi?
UpTheCreek,
22

Tak, możesz używać instrukcji warunkowej z EJS, jak if else, operatora trójargumentowego lub nawet przełącznika wielkości liter

Na przykład

Operator trójskładnikowy : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Sprawa przełącznik

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

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

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

} %>
Om Sharma
źródło
16

Możesz także użyć else ifskładni:

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>
pzrq
źródło
4
należy tutaj podkreślić, że nawias zamykający musi być ostatecznie użyty w tym samym wierszu, co else / else if
Paulo
1

Wiem, że to trochę późna odpowiedź

możesz użyć instrukcji if i else w ejs w następujący sposób

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

Chcę jednak podkreślić, że jeśli używasz kodu w ten sposób,

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

Spowoduje to błąd.

Mam nadzieję, że to komuś pomoże

Achintha Isuru
źródło