【问题标题】:Is it best practice to achieve recursion via a partial?通过部分实现递归是最佳实践吗?
【发布时间】:2010-09-20 03:34:48
【问题描述】:

我需要在 HTML 中显示嵌套的集合结构。我正在使用以下部分:

<ul<%= ' id="tree"' if depth == 0 %>>
<% items.each do |item| %>
  <li id="node_<%= item.id %>"><a><%= item.name %></a>
  <% if item.has_children? %>
    <%= render :partial => 'tree_level', :locals => {:items => item.children, :depth => depth + 1} %>
  <% end %>
  </li>
<% end %>   
</ul>

这是获取代码的最佳位置吗?我“觉得”对象上应该有一个 to_html 方法,它为我转储整个树结构,尽管这可行。

【问题讨论】:

    标签: ruby-on-rails recursion


    【解决方案1】:

    我不确定这是否是最佳实践,但我使用类似的代码来渲染项目树。

    更快的替代方法是创建执行相同工作的辅助方法(递归遍历树并将部分字符串添加到结果字符串中)。这有点 PHP 风格 :( 但是对于这么少量的 HTML 是可以的,我猜 :)

    助手看起来像:

    def render_node(node)
      res = "<ul>"
      ...
      node.items.each {|n| res << render_node(n)}
      ...
      res << "</ul>"
      res
    end
    

    那么就是这样使用的:

    <%=render_node ProjectTree.new%>
    

    【讨论】:

      【解决方案2】:

      好吧,您应该意识到使用局部变量会产生(很小的)开销,因此如果性能是一个问题,您可能不想这么多地使用它们。否则我觉得使用这个没什么问题。

      但是,您可能希望使用局部变量的集合变体(请参阅“渲染局部集合”on this API page,它可以稍微清理您的代码。

      【讨论】:

        猜你喜欢
        • 2014-12-20
        • 2011-02-13
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 2011-05-18
        相关资源
        最近更新 更多