2012-04-09 47 views
2

我有一個項目列表和一個側邊欄,其中顯示有關項目的詳細信息。側邊欄是一個部分,當onmouseenter事件觸發列表中的某個項目時,該部分應該隨Ajax更改。使用Rails 3中的Ajax更新部分

我設法通過Ajax來(在我進入鼠標的項目)的ID發送到我的控制器的行動「清單」,但部分未更新... :(

我相信,我非常接近解決方案,我是Ajax新手,我在StackOverflow和其他許多網站上搜索了整個下午,但他們總是解釋如何使用Ajax管理CRUD操作,但它似乎不適合我。 。

下面是代碼:

-The AJAX部分:

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

-The控制器動作:

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 

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

內部的第二部分I有它包裝一切div.item的。 所以基本上,我想更新側邊欄的內容,就是這樣。

對不起,如果問題似乎很愚蠢,並提前感謝您的幫助。

問題解決了,感謝Ogz Wizard! XD

回答

2

您需要傳遞迴調函數來處理來自AJAX請求的響應。見http://api.jquery.com/jQuery.post/

一個例子可能是這樣的:

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

謝謝你,我會檢查你的鏈接現在! – Alex 2012-04-09 21:24:28

+0

所以我猜response_data是:render:partial =>「item/sidebar/sidebar_home」,:object => @item? – Alex 2012-04-09 21:28:15

+0

是的,它的工作原理我將用最終的解決方案編輯我的文章。非常感謝Ogz巫師,你拯救了我的一天! – Alex 2012-04-09 21:39:05