Posso usar instruções condicionais com modelos EJS (em JMVC)?


101

e se sim, qual é a sintaxe? Meu objetivo é adicionar um 's' antes da palavra 'comentário' quando houver mais de um. em um modelo jQuery.ejs em um aplicativo JMVC. As seguintes pausas. Não consigo encontrar nenhum documento para condicionais ...

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

Sua sintaxe parece correta e funciona para mim. Tem certeza de que var commentsNumber existe e é um inteiro?
Ryan Crispin Heneise

1
Sim, é estranho que as condicionais não sejam mencionadas nos documentos!
UpTheCreek

Respostas:


171

Para outros que tropeçam nisso, você também pode usar ejs params / props em declarações condicionais:

Arquivo recipes.js:

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

Arquivo recipes.ejs:

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

3
Você pode, no caso de uma includedeclaração, escrever o inline condicional? Isso está escrevendo <% if (true) { include foo/bar } %>parece um erro. Existe um método semelhante ou é necessário quebrar o includeby <% %>.
kuanb

Obrigado, eu estava procurando por essa resposta antes de tentar.
CTala

Obrigado! Eu estava tentando exibir elementos condicionais de alterações no servidor. Sua resposta me mostrou que eu precisava avaliar tudo no cliente.
buildpax de

161

As condicionais funcionam se estiverem estruturadas corretamente. Encontrei esse problema e descobri.

Para condicionais, a tag anterior elsedeve ser emparelhada com a tag final da anterior, ifcaso contrário, as instruções serão avaliadas separadamente e produzirão um erro.

ERRO!

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

Corrigir

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

espero que isso tenha ajudado.


2
Obrigado !! Isso me prendeu por um tempo.
xblymmx

3
Isso foi incrivelmente útil, pois eu estava tendo um problema em que estava colocando minha elselinha em uma linha diferente, como o primeiro bloco de código que você mencionou. Muito obrigado por incluir esses exemplos !!
Michael Platt

22

EJS parece se comportar de maneira diferente dependendo se você usa {} notação ou não:

Eu verifiquei e a seguinte condição foi avaliada como você esperaria:

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

enquanto este não:

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

11
Você esperaria que um único caractere de espaço fizesse algo?
UpTheCreek

22

Sim, você pode usar a instrução condicional com EJS como if else, operador ternário ou até mesmo switch case também

Por exemplo

Operador ternário : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Caixa de troca

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

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

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

} %>

16

Você também pode usar a else ifsintaxe:

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

4
o que você precisa destacar aqui é que o colchete de fechamento deve ser definitivamente usado na mesma linha que else / else if
Paulo

1

Eu sei que esta é uma resposta um pouco atrasada,

você pode usar as instruções if e else em ejs como segue

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

Mas há outra coisa que quero enfatizar é que, se você usar o código dessa forma,

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

Isso produzirá um erro.

Espero que isso ajude alguém

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.