我可以在 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
语句的情况下编写条件内联吗?那就是写<% if (true) include foo/bar %>
似乎是错误的。有没有类似的方法或者是否有必要通过<% %>
破解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
举例
三元运算符:
<%- 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;
%>
【讨论】:
很高兴看到 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 中)吗?的主要内容,如果未能解决你的问题,请参考以下文章