2

我需要在 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对象上应该有一个方法可以为我转储整个树结构,尽管这可行。

4

2 回答 2

2

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

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

助手看起来像:

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

然后它是这样使用的:

<%=render_node ProjectTree.new%>
于 2008-10-31T07:50:05.180 回答
0

好吧,您应该意识到使用 partials 有(很小的)开销,所以如果性能是一个问题,您可能不想这么多地使用它们。否则我觉得使用这个没什么问题。

但是,您可能希望使用局部变量的集合变体(请参阅此 API 页面上的“呈现局部集合” ,它可以稍微清理您的代码。

于 2008-10-31T08:28:56.690 回答