• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

Ruby On Rails und AJAX Frage

Demo

Süssreinette (Aargauer Herrenapfel)
Registriert
02.04.04
Beiträge
411
Hi,

ich hab ein AJAX Problem bei meiner Rails Anwendung. Und zwar folgendes. Es werden alle eingetragenen Daten (es handelt sich hier um eine Art Nachricht - also Ueberschrift und Nachrichtenkoerper) aus der DB geholt und aufgelistet, allerdings nur die Ueberschrift der Nachricht. Nun habe ich neben den aufgelisteten Ueberschriften jeweils einen Link "Anzeigen","Bearbeiten". Und jetzt kommen wir zum Einsatz von AJAX. Sehen wir das ganze am Beispiel "Anzeigen", da es ja bei Bearbeiten paralell laeuft und nur ein anderer View geladen wuerde.
Bei Klick auf "Anzeigen", soll der gesamte Nachrichtenkoerper unter der Ueberschrift erscheinen. Das funktioniert auch. Mein View dazu:

Code:
<table>
  
<% for message in @messages %>
  <tr>
  	<td><%= h(message.title)%></td>
	<td><%= link_to_remote("Anzeigen", :update =>  "showContainer#{message.id}",
			:url=>{ :action => 'show', :id => message })%>
	</td>
    <td><%= link_to 'Bearbeiten', :action => 'edit', :id => message %></td>
    <td><%= link_to 'L&ouml;schen', { :action => 'destroy', :id => message }, :confirm => 'Are you sure?' %></td>
</tr>
<tr>
	<td colspan='6'><div id="showContainer<%=message.id %>"></div></td>
</tr>
<% end %>
</table>

Wie gesagt, das funktioniert. Der dazugehoerige View (also show.rhtml)

Code:
<p><strong>Title:</strong></p>
<p><%=h @message.title %></p>

<p><strong>Text:</strong></p>
<p><%=h @message.message %></p>


<%= link_to 'Edit', :action => 'edit', :id => @message %> |
<a href="#" onclick="Element.hide('showContainer<%[email protected]%>'); return false;">Hide</a>

Damit kann ich das Element 'showContainer' auch verstecken. Klicke ich allerdings erneut auf "Anzeigen", passiert garnix. Fuege ich explizit in den View, in dem dieNachrichten aufgelistet werden, jeweils
Code:
<a href="#" onclick="Element.show('showContainer<%=message.id %>'); return false;">Hide</a>
hinzu zeigt er mir das Element wieder an. Wie macht man das nun richtig ? Wie muss ich vorgehen, damit er das Element anzeigt, unabhaengig davon ob der Request schon gesendet wurde oder nicht ? Aus den Rails Callbacks werde ich nicht wirklich schlau.

Ich hoffe, es ist einigermassen verstaendlich. ;)
 

Demo

Süssreinette (Aargauer Herrenapfel)
Registriert
02.04.04
Beiträge
411
Da will ich mir mal selber antworten ;)

Im show.rhtml view muss es heissen
Code:
<a href="#" onclick="Element.update('showContainer<%[email protected]%>',''); return false;">Hide</a>