【问题标题】:How to print result of _each method in eco template如何在生态模板中打印_each方法的结果
【发布时间】:2012-05-18 04:04:28
【问题描述】:

我确定我做错了很简单,但似乎找不到解释。我的模板中有以下行,它没有将任何值打印到 html 输出:

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

这一行完美地将值打印到控制台:

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

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

【问题讨论】:

    标签: javascript coffeescript underscore.js eco


    【解决方案1】:

    Underscore 的 each 不返回任何内容,因此 &lt;%= _.each(...) %&gt; 没有做任何有用的事情。你可以使用_.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() %>
    

    【讨论】:

    • 感谢您的澄清,最后一个。如果each 方法没有返回任何内容,那么标签被写入控制台很奇怪
    • @socratic_singh:console.log 所做的与模板中的最终结果完全不同。
    【解决方案2】:

    除了有用的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>
    

    【讨论】:

    • 不幸的是,这不起作用;进行了一些挖掘,并且需要在遍历哈希时将 'in' 替换为 'of'。不过,当您需要标记时,绝对会更好 - 谢谢!
    • @socratic_singh Ups,我完全错过了这是一个对象而不是正在迭代的数组。我更新了使用of 而不是in 的答案,所以它不会误导未来可能的读者呵呵。感谢您指出!
    【解决方案3】:

    这是一个使用下划线的_.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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多