如何在eco模板中打印_each方法的结果

时间:2012-05-09 15:46:14

标签: javascript coffeescript underscore.js eco

我确信我做的很简单,但似乎无法找到解释。我的模板中有以下行,它没有在html输出中打印任何值:

  <%= _.each(@place.get("hash"),(count, tag) -> "#{tag} ") %>

这一行将控制台的值完全打印出来:

  <%= _.each(@place.get("hash"),(count, tag) -> console.log "#{tag} ") %>

当我尝试使用打印命令并刷新时,谷歌浏览器会抛出一个打印菜单。我该如何解决这个

3 个答案:

答案 0 :(得分:6)

除了有用的Underscore方法,mu太短mentioned,你还可以在Eco中使用CoffeeScript的原生for of

<% for tag of @place.get("hash"): %>
  <%= tag %>
<% end %>

如果您需要在每个元素周围添加一些标记,这可能很有用。例如:

<ul>
  <% for tag of @place.get("hash"): %>
    <li><%= tag %></li>
  <% end %>
</ul>

答案 1 :(得分:2)

下划线的each不返回任何内容,因此<%= _.each(...) %>没有做任何有用的事情。您可以使用_.mapjoin

<%= _(@place.get('hash')).map((count, tag) -> tag).join(' ') %>

或者您可以使用_.keysjoin

<%= _(@place.get('hash')).keys().join(' ') %>

您的_.each只是提取密钥,因此您应该说出您的意思。

如果你正在使用node.s那么你也应该有Object.keys

<%= Object.keys(@place.get('hash')).join() %>

答案 2 :(得分:0)

以下是使用下划线_.each方法迭代哈希的示例:

给出哈希:

articlesByMonth = {'2014-07': [{id: 1, title: 'foo'}, {id: 2, title: 'bar'}]}

结合模板:

<ul>
  <% _.each articlesByMonth, (articles, month) =>: %>
    <%= month %>
    <ul>
      <% _.each articles, (article) =>: %>
        <li><%= article.title %></li>
      <% end %>
    </ul>
  <% end %>
</ul>