2010-12-10 77 views
4

這是一個使用jQuery 1.4.4的Rails 3項目。Rails 3:如何使用UJS將複雜的行添加到表中?

我有一個在表中顯示的資源列表索引動作,完成一個「消滅」像你這樣的鏈接會得到從支架:

<tr id="showcase_item_<%= showcase_item.id %>" class="<%= cycle(' alt','') %>"> 
    <td><%= displayable.identifier %></td> 
    <td><%= escape_javascript(link_to 'Remove', showcase_item, :confirm => 'Remove this item from your Showcase?', :method => :delete, :remote => true) %></td> 
</tr> 

該索引視圖我也有一個小形式,做一個AJAX「創造」的資源,我使用Javascript將資源表中追加在我create.js.erb:

$("#showcase tr:last").after("<tr id=\"showcase_item_<%= @showcase_item.id %>\" class=\"<%= cycle(' alt','') %>\"> \ 
<% displayable = @showcase_item.displayable %> \ 
<td><%= displayable.identifier %></td> \ 
<td><%= link_to 'Remove', @showcase_item, :confirm => 'Remove this item from your Showcase?', :method => :delete, :remote => true %></td></tr>") 

也就是說脆,猙獰,不幹燥。我還能怎麼做?

什麼是Rails這樣做的方式?

我很感激您可以提供的任何幫助或指導!

回答

4

訣竅是將表格行提取爲部分(因爲它正在使用兩次)。然後在您的js視圖中,簡單渲染部分。例如,下面是一個小片段,讓你開始:

# _object.html.erb 
<%= content_tag_for(:tr, @object, :class => cycle('odd','even')) do %> 
<td><%=h @object.name %></td> 
<td><%= link_to 'Remove', object_path(@object), :method => :delete %></td> 
<% end %> 

# index.html.erb 
<table id="objects"> 
    <%= render :partial => @objects %> 
</table> 

# create.js.rjs 
page << "$('#objects').append('#{escape_javascript(render :partial => @object)}');" 
+0

哇,這是清潔的工作。這很有趣,謝謝凱文。 – AKWF 2010-12-10 08:10:47

1

我覺得凱文在他的例子中有一個小的錯字。 應該被用來替代「@object」

# _object.html.erb 
<%= content_tag_for(:tr, object, :class => cycle('odd','even')) do %> 
<td><%=h @object.name %></td> 
... 
0

「對象」變量我發現這將與僱員再培訓局 _create.js.erb

$('#objects').append("<%= escape_javascript(render :partial => @object) %>");

相關問題