EJS是否处理array.map(回调)



我将一系列对象传递给EJS模板,我想使用常规.map()数组的方法将其映射到链接中。但是由于我无法弄清楚的原因,我要通过的回调到Map()在EJS中无法正常工作,而且我会得到空的结果。

我的数据是一个对象数组,每个对象都带有"部分"one_answers"名称"键。此数组以"条目"传递到模板:

siteHeaders = [ { section: "home", name: "Home"}, 
                { section: "about", name: "About Me"}, 
                ... plus few more ]

模板看起来像这样,我将其放在一个局部变量中,称为(惊喜) template

<% entries = entries.map(function(elem) { -%>
  <% return -%>
  <a href="/<%= elem.section %>">
    <%= elem.name %>
  </a>
<% } ) -%>
<p><%- entries.join(" | ") %></p>

此模板的结果,当我调用require('ejs').render(template, {entries: siteHeaders})是:

          <p> |  |  |  | </p>

我不明白的是为什么当相应的地图调用在repl中正常工作时,这在EJS模板中不起作用:

> siteHeaders.map(function(e){ return '<a href="/' + e.section +'">' + e.name + '</a>' })
[ '<a href="/home">Home</a>',
  '<a href="/guide">About Me</a>',
  '<a href="/quickstart">Portfolio</a>',
  '<a href="/reference">Blog</a>',
  '<a href="/downloads">Contact</a>' ]
>

有线索?

此代码应起作用:

<% entries = entries.map(function(elem) {
    return '<a href="/' + elem.section + '">' + elem.name + '</a>';
}) -%>
<p><%- entries.join(" | ") %></p>

您不能在功能中使用简单的HTML。仅在循环和条件下才有可能。

它不如join('|')那么干净,但是如果您不想串联,则可以做到这一点:

<% entries.forEach(function(entry, i, entries){ %>
    <a href="<%= entry.section %>"><%= entry.name %></a>
    <%= i == entries.length-1 ? ' | ' : '' %>
<% } %>

我没有设法在EJ中使用地图,但是我找到了一种至少对我来说很容易

的方法
<ul>
  <% for (item of toDoList) { %>
    <li> <%= item %> </li>
  <% } %>
</ul>

最新更新