node.js - 嵌套 EJS 模板循环

标签 node.js templates ejs

我正在尝试访问 EJS 模板中的嵌套数组。在我的后端,我渲染了这个,“lists”是一个业务数组,userId 是 session 中的用户 _id。

res.render('listOfBusinesses', {lists:business, userId:loggedUserID});

在前端,我循环遍历列表并获取正确的属性值,但是其中一个属性是关注者 _ids 数组,我需要与 userId 进行交叉检查以提供关注按钮或取消关注按钮。

前端看起来像这样:

<% for (var i = 0; i < lists.length; i++) { %>

  <div class="col-xs-6 col-sm-4 panel">
     <a href="/busProfileFromUser?busId=<%= lists[i]._id %>">
      <img src="<%= lists[i].imgpath %>" class="img-responsive follow-img" />
     </a> 
  </div>

上面的内容按预期工作,但属性 lists[i].followers 是一个数组,我需要再次循环,但无法获得正确的语法。

我的想法是这样的:

for (var i = 0; i< lists[i].followers.length; i++){

  if (list[i] == userId) {
    <button>Follow</button>
  } else {
    <button>Unfollow</button>
  }
}

非常感谢您的建议!!

几乎已经解决了这个问题,但卡住了一段时间,但部分问题是在条件语句中使用了传递给渲染的变量,该条件语句正在检查对象 id 是否等于字符串。所以我调用了 toString() 以确保它们是字符串。它现在返回正确的按钮,但是它只返回一个按钮,并且不显示其余企业列表的任何内容。 谁能解释为什么其他按钮不显示

        <% for (var j = 0; j < lists[i].followers.length; j++) {%>

            <% if (lists[i].followers[j].toString() == userId.toString())           { %>
              <button>Unfollow</button>

              <% } else { %>
                <button>FOLLOW</button>
              <% } %>

        <% } %>

最佳答案

EJS 完全支持嵌套循环和条件。一旦遍历某个列表,您就可以采用另一个迭代变量并进行嵌套循环。

<% for (var i = 0; i < lists.length; i++) {%>
  <a href="/busProfileFromUser?busId=<%= lists[i]._id %>">
    <img src="<%= lists[i].imgpath %>" class="img-responsive follow-img" />
  </a>

  <!-- Nested loop below --> 
  <% for (var j = 0; j < lists[i].followers.length; j++) {%>
    <li>
      <% if (lists[i].followers[j] == userId) { %>
        <button>Follow</button>
      <% } else { %>
        <button>Unfollow</button>
      <% } %>
    </li>
  <% } %>

<% } %>

关于node.js - 嵌套 EJS 模板循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29701351/

相关文章:

javascript - 如何从字符串中查找EJS标签变量名?

javascript - 如何在 EJS 中获取 MySQL 值作为颜色?

javascript - iframe内容是文本而不是html代码

javascript - API 的集成与单元测试

c++ - 将模板函数和重载作为函数参数传递

node.js - 将 javascript 与 node.js 和 pug 混合

c++ - 将任意 lambda 表达式传递给函数?

c++ - 将 Functor 转换为 Object of Type 函数

javascript - 为什么是 ecmascript 而不是 javascript?为什么 ecma 网站看起来像是 1999 年左右的?

javascript - 无法保存从 Google-Play-Scraper 返回的应用信息?