2011-12-18 99 views
0

我想渲染一個集合的部分,並已能夠做到這一點,但是,它是循環的部分比我想要的。這裏是我的部分代碼:在部分渲染中使用集合

 <table class="tabs"> 
      <tr> 
       <% if tabs[:label] == selected %> 
        <%= tag("td", :id => "selected") %> 
       <% else %> 
        <%= tag("td") %> 
       <% end %> 
        <span class="before"></span> 
        <span class="middle"> 
         <%= link_to tabs[:label], tabs[:url] %> 
        </span> 
        <span class="after"></span> 
       </td> 

      </tr>   
     </table> 

     <hr /> 

而我想創建一個帶有該選項卡的行(僅通過td的迭代)。相反,它貫穿整個過程,併爲集合中的每個成員創建一個新表。如果不從部分中刪除表格,tr和hr標籤,可以這樣做嗎?

TIA!

回答

1

我打算假設您正在使用Ruby on Rails,並且選項卡是您的集合的名稱。如果是這樣,那麼你可以將它們移動到自己的部分:

<td id="#{ tab[:label] == selected ? 'selected' : '' }" > 
    <span class="before"></span> 
    <span class="middle"><%= link_to tab[:label], tab[:url] %></span> 
    <span class="after"></span> 
</td> 

通知我如何擺脫if塊,你應該縮進告訴你一些簡單的邏輯不妥。在這種情況下,邏輯並不反映html結構,這通常意味着有更好的方法來完成它。還要注意這個標籤是單數的,而不是複數;我們正在處理這個部分中的一個標籤,並且每個標籤都調用一次部分。

最後一兩件事:除非你有與id玩一些功能上的原因,它可能是更好地把選擇的風格,而不是id

返回執行。重要的是我們將其命名爲「部分」,因爲它決定了你怎麼稱呼它。在這種情況下,我們將它稱爲_tab.html.erb(再次,單數)。

現在,讓你與這個保留在原始文件:

<table class="tabs"> 
    <tr> 
    </tr> 
</table> 

爲了使它調用新的部分只需添加這一行:

<table class="tabs"> 
    <tr> 
    <%= render tabs %> 
    </tr> 
</table> 

看到了嗎? 標籤在這裏是複數。模板助手將調用_tab.html.erb for each tab in tabs

我測試了代碼。你應該對此感到高興。

順便說一句,回到我的肥皂盒中片刻......你看不到用於製表符的表格了,至少在軌道上沒有。趨勢是使用<ul><li>的內部和一些CSS樣式。