EJS处理array.map(callback)?

我将一个对象数组传递给一个EJS模板,我想使用数组的常规.map()方法将其映射到链接。 但由于我无法弄清楚的原因,我传递给map()的callback函数在EJS中不能像我期望的那样工作,而且我得到的结果是空的。

我的数据是一个对象数组,每个对象都有一个“section”和一个“name”键。 这个数组作为“条目”传递给模板:

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

模板看起来像这样,我把它放在一个叫做(惊喜) template的局部variables中:

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

我没有得到的是为什么这不起作用的EJS模板,当相应的地图调用在REPL中工作得很好:

 > 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。 只有在循环和条件下才有可能。

它不像连接('|')那么干净,但是如果你不想连接,你可以这样做:

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