Могу ли я использовать условные операторы с шаблонами EJS (в JMVC)?


103

и если да, то каков синтаксис? Моя цель - добавить букву «s» к слову «комментарий», когда их больше одного. в шаблоне jQuery.ejs в приложении JMVC. Следующие перерывы. Я не могу найти никаких документов для условных выражений ...

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

Ваш синтаксис выглядит правильным и работает на меня. Вы уверены, что var commentsNumber существует и является целым числом?
Райан Криспин Хениз 01

1
Да, странно, что в документации не упоминаются условные обозначения!
UpTheCreek

Ответы:


172

Для тех, кто наткнулся на это, вы также можете использовать параметры / свойства ejs в условных выражениях:

recipes.js Файл:

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

recipes.ejs Файл:

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

3
Можете ли вы в случае includeоператора написать условное встроенное выражение? Это письмо <% if (true) { include foo/bar } %>выглядит ошибочным. Есть ли способ , подобные или необходимо , чтобы вспыхнуть свой includeпуть <% %>.
kuanb

Спасибо, я искал этот ответ, прежде чем попробовать.
CTala

Спасибо! Я пытался отобразить условные элементы из изменений на сервере. Ваш ответ показал мне, что мне нужно все оценить на клиенте.
buildpax

163

Условные выражения работают, если они правильно структурированы, я столкнулся с этой проблемой и разобрался.

Для условных операторов elseпредыдущий тег должен быть соединен с конечным тегом предыдущего, ifиначе операторы будут оцениваться отдельно и вызывать ошибку.

ОШИБКА!

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

Верный

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

надеюсь, что это помогло.


2
Спасибо !! Это на время меня зацепило.
xblymmx

3
Это было невероятно полезно, поскольку я столкнулся с проблемой, когда я помещал свой elseв другую строку, например, первый блок кода, который вы упомянули. Большое спасибо за включение этих примеров !!
Майкл Платт

23

Да, вы можете использовать условный оператор с EJS, например if else, тернарный оператор или даже переключатель case

Например

Тернарный оператор : <%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %>

Корпус переключателя

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

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

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

} %>

22

Похоже, что EJS ведет себя по-разному в зависимости от того, используете ли вы нотацию {} или нет:

Я проверил и оценил следующее условие, как и следовало ожидать:

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

а этот нет:

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

11
Вы бы ожидали, что один-единственный пробел что-то сделает?
UpTheCreek

16

Вы также можете использовать else ifсинтаксис:

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

4
что вам нужно здесь подчеркнуть, так это то, что закрывающая скобка должна наиболее определенно использоваться в той же строке, что и else / else if
Пауло

1

Я знаю, что это немного запоздалый ответ,

вы можете использовать операторы if и else в ejs следующим образом

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

Но есть еще одна вещь, которую я хочу подчеркнуть: если вы используете код таким образом,

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

Это приведет к ошибке.

Надеюсь, это кому-то поможет


0

Просто сделав код короче, вы можете использовать функции ES6. То же самое можно записать как

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

И Templeate можно рендерить так же!

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.