2012-04-09 9 views
2

Ich habe eine Liste von Artikel und eine Sidebar, wo ich Details zu einem Artikel anzeigen. Die Sidebar ist eine partielle, die sich mit Ajax ändern sollte, wenn das Ereignis onmouseenter auf einem Element der Liste ausgelöst wird.Update teilweise mit Ajax in Rails 3

Ich habe es geschafft, die ID zu senden (der Punkt, an dem ich die Maus eingeben) an mein Controller-Aktion „Liste“ durch Ajax aber die teilweise aktualisiert wird nicht ... :(

Ich bin sicher, dass Ich bin sehr nah an der Lösung Ich bin neu mit Ajax und ich habe den ganzen Nachmittag auf StackOverflow und vielen anderen Websites gesucht, aber sie erklären immer, wie man die CRUD-Aktionen mit Ajax verwaltet und es scheint nicht für mich zu arbeiten. .

Hier ist der Code:

-Der ajax-Teil:

$("div.item").mouseenter(function(event){ 
var id = $(this).attr('data'); 
    var url = "/item/list?id="+id+"&lg=en"; 
    var data = $(this).serialize(); 
    $.post(url,function(response_data){$("#item_details").html(response_data)}); 
    return false; 
}); 

-Der Controller-Aktion:

def list 
    @items = Item.all 
    if request.xhr? 
     id_exists?("item", params[:id], "item", "list"){@item = Item.find(params[:id])} 

     render :partial => "item/sidebar/sidebar_home", :object => @item 
    else 
     @item = @items.first unless @items.empty? 
    end 
end 

-Der haml:

content_for :sidebar do 
    #item_details 
     =render :partial => "item/sidebar/sidebar_home", :object => @item 


.items_wrapper 
-if @items.empty? 
    ="No items" 
-else 
    = render :partial => "item/partials/item", :collection => @items 

Innerhalb des zweiten Teil ich die div.item haben, die alles umschließt. Also im Grunde möchte ich den Inhalt der Seitenleiste aktualisieren, das ist alles.

Sorry, wenn die Frage albern erscheint und danke im Voraus für Ihre Hilfe.

Problem gelöst dank Wizard of Ogz! XD

Antwort

2

Sie müssen eine Rückruffunktion übergeben, um die Antwort von Ihrer AJAX-Anfrage zu verarbeiten. Siehe http://api.jquery.com/jQuery.post/

Ein Beispiel könnte wie folgt aussehen:

$.post(url, data, function(response_data){ $("#sidebar_id").replaceWith(response_data) }); 
+0

danke, werde ich Ihren Link jetzt überprüfen! – Alex

+0

Also ich denke, die response_data ist: render: partial => "Element/sidebar/sidebar_home",: Objekt => @item? – Alex

+0

Ja, es funktioniert großartig Ich werde meinen Beitrag mit der endgültigen Lösung bearbeiten. Vielen Dank Zauberer von Ogz du hast meinen Tag gerettet! – Alex