Posso utilizzare istruzioni condizionali con modelli EJS (in JMVC)?


101

e se sì, qual è la sintassi? Il mio obiettivo è anteporre una "s" alla parola "commento" quando ce n'è più di una. in un modello jQuery.ejs in un'app JMVC. Le seguenti pause. Non riesco a trovare alcun documento per i condizionali ...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>

La tua sintassi sembra corretta e funziona per me. Sei sicuro che var commentsNumber esista e sia un numero intero?
Ryan Crispin Heneise

1
Sì, strano che i condizionali non siano menzionati nei documenti!
UpTheCreek

Risposte:


171

Per gli altri che si imbattono in questo, puoi anche usare ejs params / props nelle istruzioni condizionali:

File ricette.js:

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

File ricette.ejs:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>

3
Puoi, nel caso di una includedichiarazione, scrivere il condizionale in linea? Cioè scrivere <% if (true) { include foo/bar } %>sembra sbagliare. Esiste un metodo simile o è necessario rompere la includedai <% %>.
kuanb

Grazie, stavo cercando questa risposta prima di provarla.
CTala

Grazie! Stavo cercando di visualizzare elementi condizionali dalle modifiche sul server. La tua risposta mi ha mostrato che dovevo valutare tutto sul cliente.
buildpax

161

I condizionali funzionano se sono strutturati correttamente, mi sono imbattuto in questo problema e l'ho capito.

Per i condizionali, il tag prima elsedeve essere accoppiato con il tag finale del precedente ifaltrimenti le istruzioni verranno valutate separatamente e produrranno un errore.

ERRORE!

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

Corretta

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

spero che questo abbia aiutato.


2
Grazie !! Questo mi ha bloccato per un po '.
xblymmx

3
Questo è stato incredibilmente utile poiché mi sono imbattuto in un problema in cui stavo mettendo il mio elsesu una riga diversa come il primo blocco di codice che hai menzionato. Grazie mille per aver incluso questi esempi !!
Michael Platt

22

EJS sembra comportarsi in modo diverso a seconda che si utilizzi o meno la notazione {}:

Ho controllato e la seguente condizione viene valutata come ti aspetteresti:

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

mentre questo no:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  

11
Ti aspetteresti che un singolo carattere spaziale faccia qualcosa?
UpTheCreek

22

Sì, puoi usare l'istruzione condizionale con EJS come if else, operatore ternario o anche switch case

Per esempio

Operatore ternario : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Scatola dell'interruttore

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

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

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

} %>

16

Puoi anche usare la else ifsintassi:

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>

4
quello che devi sottolineare qui è che la parentesi di chiusura deve essere utilizzata in modo definitivo nella stessa riga di else / else if
Paulo

1

So che questa è una risposta un po 'tardiva,

puoi usare le istruzioni if ​​e else in ejs come segue

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

Ma c'è un'altra cosa che voglio sottolineare è che se usi il codice in questo modo,

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

Produrrà un errore.

Spero che questo possa aiutare qualcuno

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.