2008-10-31 52 views
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方法对象为我转储整个树结构,虽然这有效。

回答

2

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

更快的选择是创建助手方法做同样的工作(递归遍历树和添加部分字符串到结果字符串中)。这是一个有点PHP风格:(但对于HTML这样的少量就OK了,我猜这是

助手的样子:

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

然后这样使用:

<%=render_node ProjectTree.new%> 
0

那么,你应该意识到使用partials会有一个(小的)开销,所以如果性能是一个问题,你可能不想使用它们。否则,我看到使用它的小问题。

但是,您可能需要使用谐音的集合变(见“渲染的谐音集” on this API page,它可以清理你的代码位。

相关问题