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

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

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.


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

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;

} %>

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.