2012-11-03 87 views
1

CRUD從索引頁。Rails:編輯/更新後如何讓ajax刷新索引?

我知道有寶石可以使這個容易,但如果可能的話,要儘量避免。

在Index.html.erb
- 模擬_newsfeeds局部成< UL ID =上index.html.erb
「feedsNews」> - 部分形式(:創建和:編輯正在使用相同的形式)
- 當用戶點擊「編輯」上的新聞源BTN,我追加部分形式的新聞源

問題
編輯/更新變化正在作出...不幸的是,我似乎無法得到AJAX:成功重裝_newsfeeds部分位於index.html.erb。如果是一些愚蠢的,我很抱歉......

NEWSFEEDS_CONTROLLER

def index 
     @newsfeeds = Newsfeed.all 
     @newsfeed = Newsfeed.new 
     @newsfeeds = Newsfeed.order("position") #for Sortable 

     respond_to do |format| 
     format.html # index.html.erb 
     format.json { render json: @newsfeeds } 
     format.js 
     end 
    end 

    def update 
     @newsfeed = Newsfeed.find(params[:id]) 

     respond_to do |format| 
     if @newsfeed.update_attributes(params[:newsfeed]) 
      format.html { redirect_to newsfeeds_url, notice: 'Updated' } 
      format.json { head :no_content } 
     else 
      format.html { render action: "edit" } 
      format.json { render json: @newsfeed.errors, status: :unprocessable_entity } 
     end 
     end 
    end 

index.html.erb

<div> 
     <div id="spinner" style="display:none;"></div> 
     <ul id="feedsNews" class="showList" data-update-url="<%= sort_newsfeeds_url %>" > 
        <%= render :partial => @newsfeeds %> 
     </ul> 
    </div> 

index.js.erb的

$('#<%= dom_id(@newsfeed, :edit) %>') 
     .bind('ajax:send', function(){ 
      $('#spinner').show(); 
     }) 
     .bind('ajax:success', function() { 
      $('#spinner').hide(); 
      $('#feedsNews').innerHTML ('<%= escape_javascript(render(@newsfeeds)) %>') 
     }) 

任何幫助將不勝感激。

---------------- UPDATE --------------------

改成了這,它工作... sorta ... index.js.erb好像它是在更新動作重定向之前發射的,所以螢火蟲給了我一個無窮無盡的'微調'index.js.erb GET請求

$.ajax({ 
    complete: function() { 
    $('#feedsNews').html('<%= escape_javascript(render :partial => @newsfeeds) %>'); 
    alert('Changes Saved!'); 
} 

});

回答

2

我認爲讓Rails完成這種工作(刷新ajax部分)並不是一個好主意。因爲你必須編寫Ruby和js代碼。

這項工作只能由jQuery完成。例如發送ajax請求,然後在回調中調用update action,例如

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    $('.result').html(data); 
    alert('Load was performed.'); 
    } 
}); 
+0

感謝您的幫助。 – econduck

+0

我能夠得到它與以下工作,但JS似乎在更新行動,這是奇怪的重定向之前觸發。如果我弄清楚發生了什麼'$ .ajax({0} .ajax({0}){('#feedsNews')。html('<%= escape_javascript(render:partial => @ newsware)%>'); \t \t alert('Changes Saved!'); \t} }); 「 – econduck