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

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

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.


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

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;

} %>

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.