Puis-je utiliser des instructions conditionnelles avec des modèles EJS (dans JMVC)?


101

et si oui, quelle est la syntaxe? Mon objectif est d'ajouter un «s» au mot «commentaire» lorsqu'il y en a plus d'un. dans un modèle jQuery.ejs dans une application JMVC. Les pauses suivantes. Je ne trouve pas de documentation pour les conditions ...

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

Votre syntaxe semble correcte et fonctionne pour moi. Êtes-vous sûr que var commentsNumber existe et est un entier?
Ryan Crispin Heneise

1
Oui, étrange que les conditions ne soient pas mentionnées dans la documentation!
UpTheCreek

Réponses:


171

Pour les autres qui trébuchent sur cela, vous pouvez également utiliser les paramètres / accessoires ejs dans les instructions conditionnelles:

Fichier recettes.js:

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

Fichier recettes.ejs:

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

3
Pouvez-vous, dans le cas d'une includeinstruction, écrire le conditionnel en ligne? Cela <% if (true) { include foo/bar } %>semble être une erreur. Existe-t-il une méthode similaire ou est-il nécessaire de sortir du includepar <% %>.
kuanb le

Merci, je cherchais cette réponse avant de l'essayer.
CTala

Je vous remercie! J'essayais d'afficher les éléments conditionnels des modifications sur le serveur. Votre réponse m'a montré que je devais faire tout évaluer sur le client.
buildpax

161

Les conditions fonctionnent si elles sont structurées correctement, j'ai rencontré ce problème et je l'ai résolu.

Pour les conditions, la balise avant elsedoit être associée à la balise de fin de la précédente, ifsinon les instructions seront évaluées séparément et produiront une erreur.

ERREUR!

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

Correct

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

espérons que cela a aidé.


2
Merci !! Cela m'a coincé pendant un moment.
xblymmx

3
Cela a été extrêmement utile car je rencontrais un problème où je mettais mon elsesur une ligne différente comme le premier bloc de code que vous avez mentionné. Merci beaucoup d'avoir inclus ces exemples !!
Michael Platt

22

EJS semble se comporter différemment selon que vous utilisez ou non la notation {}:

J'ai vérifié et la condition suivante est évaluée comme vous vous en doutez:

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

alors que celui-ci ne:

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

11
Vous attendez-vous à ce qu'un seul caractère d'espace fasse quelque chose?
UpTheCreek

22

Oui, vous pouvez utiliser une instruction conditionnelle avec EJS comme if else, opérateur ternaire ou même switch case également

Par exemple

Opérateur ternaire : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Boîtier de commutation

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

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

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

} %>

16

Vous pouvez également utiliser la else ifsyntaxe:

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

4
ce que vous devez souligner ici, c'est que la parenthèse fermante doit être utilisée le plus définitivement dans la même ligne que else / else if
Paulo

1

Je sais que c'est une réponse un peu tardive,

vous pouvez utiliser les instructions if et else dans ejs comme suit

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

Mais il y a une autre chose que je veux souligner, c'est que si vous utilisez le code de cette façon,

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

Cela produira une erreur.

J'espère que cela aidera quelqu'un

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.