我可以在 EJS 模板中使用条件语句(在 JMVC 中)吗?

Posted

技术标签:

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

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

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

【问题讨论】:

你的语法看起来不错,对我有用。你确定 var cmetsNumber 存在并且是一个整数吗? 是的,奇怪的是文档中没有提到条件! 【参考方案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 模板中,我们可以遵循以下规则:

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

    将 放在每个纯 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>
<%%>

【讨论】:

以上是关于我可以在 EJS 模板中使用条件语句(在 JMVC 中)吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 ejs 模板中获取 url 参数

如何在 ejs 模板中使用数组显示来自 mongo 的 json 数据?

在 ejs 模板文件中使用 mongoose 获取数据

EJS模板引擎

EJS模板引擎

在 EJS 模板引擎中,如何“包含”页脚?