【问题标题】:Can I use conditional statements with EJS templates (in JMVC)?我可以在 EJS 模板中使用条件语句(在 JMVC 中)吗?
【发布时间】:2012-01-03 06:04:50
【问题描述】:

如果是,语法是什么? 我的目标是在有多个评论时在“评论”一词前面加上一个“s”。在 JMVC 应用程序的 jQuery.ejs 模板中。以下休息。我找不到任何有关条件的文档...

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

【问题讨论】:

  • 你的语法看起来不错,对我有用。你确定 var cmetsNumber 存在并且是一个整数吗?
  • 是的,奇怪的是文档中没有提到条件!

标签: conditional-statements ejs


【解决方案1】:

根据您是否使用 { } 符号,EJS 的行为似乎有所不同:

我已检查并按照您的预期评估以下条件:

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

虽然这个没有:

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

【讨论】:

  • 你希望一个空格字符来做某事吗?
【解决方案2】:

对于其他偶然发现的人,您还可以在条件语句中使用 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
<% } %>

【讨论】:

  • 你能在include 语句的情况下编写条件内联吗?那就是写&lt;% if (true) { include foo/bar } %&gt; 似乎是错误的。有没有类似的方法或者是否有必要通过&lt;% %&gt;破解include
  • 谢谢,我在尝试之前一直在寻找这个答案。
  • 谢谢!我试图显示服务器上更改的条件元素。您的回答表明我需要评估客户端上的所有内容。
【解决方案3】:

如果结构正确,条件就可以工作,我遇到了这个问题并想通了。

对于条件语句,else 之前的标签必须与前一个 if 的结束标签配对,否则语句将单独评估并产生错误。

错误!

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

正确

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

希望这会有所帮助。

【讨论】:

  • 谢谢!!这让我困扰了一段时间。
  • 这非常有用,因为我遇到了一个问题,我将else 放在不同的行上,就像你提到的第一个代码块一样。非常感谢您提供这些示例!
  • 这正是我所需要的。我很惊讶为什么他们的文档中没有提到它。
【解决方案4】:

你也可以使用else if语法:

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

【讨论】:

  • 您需要在这里强调的是,右括号必须最明确地与 else/else if 在同一行中使用
【解决方案5】:

是的,您可以在 EJS 中使用条件语句,例如 if else 、三元运算符甚至 switch case

举例

三元运算符&lt;%- role == 'Admin' ? 'Super Admin' : role == 'subAdmin' ? 'Sub Admin' : role %&gt;

开关盒

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

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

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

} %>

【讨论】:

  • 很高兴看到 switch 语句有效。谢谢!
【解决方案6】:

我知道这个答案有点晚了,

你可以在ejs中使用if和else语句如下

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

但还有一点我要强调的是,如果你这样使用代码,

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

它会产生错误。

希望这对某人有所帮助

【讨论】:

    【解决方案7】:

    只要让代码更短,您就可以使用 ES6 功能。一样的东西可以写成

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

    Template 也可以渲染成一样的!

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

    【讨论】:

      【解决方案8】:

      一个简单而通用的规则 例如,为了将 javascript(for 循环)嵌入到我们的 ejs 模板中,我们可以遵循以下规则:

      1. 首先在 ejs 模板中编写您的 javascript 代码,就像您通常在 javascript 中编写的那样。

      2. 将 放在每个纯 JavaScript 行的末尾。

      例如:

      if (num%2===0) {
          <p> this is an even number</p>
      } else { 
      <p> this is an odd number</p>
      }
      

      所以现在我们必须将 ejs 语法放在每一行中:

       <% if (num%2===0) {%>
          <p> this is an even number</p>
      <%} else { %>
      <p> this is an odd number</p>
      <%}%>
      

      【讨论】:

        猜你喜欢
        • 2012-05-02
        • 2021-08-03
        • 2014-02-12
        • 2018-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        相关资源
        最近更新 更多