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.