2010-12-10 4 views
4

Dies ist ein Rails 3-Projekt mit jQuery 1.4.4.Rails 3: Wie kann ich eine komplexe Zeile mit UJS zu einer Tabelle hinzufügen?

Ich habe einen Index Aktion, die eine Liste von Ressourcen in einer Tabelle zeigt, komplett mit einem „Zerstört“ link wie man es von einem Gerüst bekommen würde:

<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> 

Auf dieser Indexansicht Ich habe auch eine kleine Form, die eine AJAX „schaffen“ für die Ressource der Fall ist, und ich bin mit Javascript um die Ressource zu dem Tisch in meinem create.js.erb anhängen:

$("#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>") 

das spröde, scheußlich ist, und nicht trocken. Wie sonst kann ich das tun?

Was ist der Rails-Weg, dies zu tun?

Ich schätze jede Hilfe oder Anleitung, die Sie zur Verfügung stellen können!

Antwort

4

Der Trick ist, die Tabellenzeile in eine partielle (wie es zweimal verwendet wird) zu extrahieren. Dann rendern Sie in Ihrer js Ansicht die partielle. Hier ist zum Beispiel ein kleiner Ausschnitt, um loszulegen:

# _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

Wow mit erb arbeiten, das ist sauber. Das macht Spaß, danke Kevin. – AKWF

+0

@AKWF Keine Sorge. Ruby on Rails kann extrem sauber sein, sobald Sie den Dreh raus haben (obwohl keine Garantie dafür besteht, dass der obige Code tatsächlich funktioniert). –

1

Ich denke Kevin haben einen kleinen Tippfehler in seinem Beispiel. Es sollte 'Objekt' Variable anstelle von '@object'

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

verwendet wurde, fand ich diese _create.js.erb

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

Verwandte Themen