1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Ruby On Rails und AJAX Frage

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von Demo, 29.03.06.

  1. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    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<%=@message.id%>'); 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. ;)
     
  2. Demo

    Demo Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    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<%=@message.id%>',''); return false;">Hide</a>
     

Diese Seite empfehlen