嵌套的EJS模板循环

use*_*979 1 templates ejs node.js

我正在尝试访问EJS模板中的嵌套数组.在我的后端,我正在渲染这个,'lists'是一个业务数组,userId是来自会话的用户_id.

res.render('listOfBusinesses', {lists:business, userId:loggedUserID});
Run Code Online (Sandbox Code Playgroud)

在前端我循环遍历列表并获取正确的属性值,但是一个属性是一组追随者_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>
Run Code Online (Sandbox Code Playgroud)

上面的工作正常,但属性lists[i].followers是一个数组,我需要再次循环,但只是无法得到正确的语法.

我正在考虑以下几点:

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

  if (list[i] == userId) {
    <button>Follow</button>
  } else {
    <button>Unfollow</button>
  }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议!!

几乎已经解决了这个问题,卡住了一段时间,但部分问题是传递给渲染的变量是在条件语句中使用的,它正在检查对象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>
              <% } %>

        <% } %>
Run Code Online (Sandbox Code Playgroud)

E_n*_*ate 5

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>
  <% } %>

<% } %>
Run Code Online (Sandbox Code Playgroud)