¿Puedo usar declaraciones condicionales con plantillas EJS (en JMVC)?

101

y si es así, ¿cuál es la sintaxis? Mi objetivo es anteponer una 's' a la palabra 'comentario' cuando hay más de una. en una plantilla jQuery.ejs en una aplicación JMVC. Los siguientes descansos. No puedo encontrar ningún documento para condicionales ...

<%=commentsNumber%> comment<% if (commentsNumber > 1) { %> s <% } %>
Regis Zaleman
fuente
Tu sintaxis parece correcta y funciona para mí. ¿Estás seguro de que var commentsNumber existe y es un número entero?
Ryan Crispin Heneise
1
Sí, es extraño que los condicionales no se mencionen en los documentos.
UpTheCreek

Respuestas:

171

Para otros que tropiezan con esto, también puede usar ejs params / props en declaraciones condicionales:

Archivo recipes.js:

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

Archivo recipes.ejs:

<%if (recipes.length > 0) { %>
// Do something with more than 1 recipe
<% } %>
Jbird
fuente
3
¿Puede, en el caso de una includedeclaración, escribir el condicional en línea? Eso es escribir <% if (true) { include foo/bar } %>parece un error. ¿Hay un método similar o es necesario para romper el includepor <% %>.
kuanb
Gracias, estaba buscando esta respuesta antes de probarla.
CTala
¡Gracias! Estaba tratando de mostrar elementos condicionales de cambios en el servidor. Su respuesta me mostró que necesitaba evaluar todo sobre el cliente.
buildpax
161

Los condicionales funcionan si están estructurados correctamente, me encontré con este problema y lo resolví.

Para los condicionales, la etiqueta anterior elsedebe emparejarse con la etiqueta final de la anterior; de lo ifcontrario, las declaraciones se evaluarán por separado y producirán un error.

¡ERROR!

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

Correcto

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

Espero que esto ayude.

StanleyZheng
fuente
2
Gracias !! Esto me detuvo por un tiempo.
xblymmx
3
Esto fue increíblemente útil ya que me encontré con un problema en el que estaba colocando mi elseen una línea diferente como el primer bloque de código que mencionaste. ¡¡Muchas gracias por incluir estos ejemplos !!
Michael Platt
22

EJS parece comportarse de manera diferente dependiendo de si usa la notación {} o no:

He verificado y se evalúa la siguiente condición como era de esperar:

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

mientras que este no:

<%if (3==3) %>  TEXT PRINTED  <% %>
<%if (3==4) %>  TEXT PRINTED  <% %>  
Kristóf Aczél
fuente
11
¿Esperaría que un solo carácter de espacio hiciera algo?
UpTheCreek
22

Sí, puede usar una declaración condicional con EJS como si no, operador ternario o incluso cambiar caso también

Por ejemplo

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

Caja del interruptor

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

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

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

} %>
Om Sharma
fuente
16

También puede utilizar la else ifsintaxis:

<% if (x === 1) { %>
    <p>Hello world!</p>
<% } else if (x === 2) { %>
    <p>Hi earth!</p>
<% } else { %>
    <p>Hey terra!</p>
<% } %>
pzrq
fuente
4
lo que debe resaltar aquí es que el corchete de cierre debe usarse definitivamente en la misma línea que else / else if
Paulo
1

Sé que esta es una respuesta un poco tardía

puede usar declaraciones if y else en ejs de la siguiente manera

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

Pero hay otra cosa que quiero enfatizar es que si usa el código de esta manera,

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

Producirá un error.

Espero que esto ayude a alguien

Achintha Isuru
fuente