2008-10-31 43 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,它可以清理你的代碼位。

相關問題