2013-06-28 158 views
0

我正在嘗試使用javascript/ajax重新排序表。我的JavaScript工作Rails AJAX和刷新頁面

的JavaScript

var ajax_header = function(e) { 
     alert('order_by') 
     var header = $(this).attr('id') 
     $.post('/users', {sort_by: header, order_by: order_by}); 
     if (order_by === "ASC") 
      order_by = "DESC" 
     else 
      order_by = "ASC" 
    } 
    $('.ajax-header').dblclick(ajax_header) 

這需要的JavaScript全球的順序從ASC更改爲降序,然後再返回並撞擊用戶控制器的索引行爲的職務。這會導致@users被重新排序。我有的問題是我不知道如何使表重繪。我可以使用rails來做到這一點,但我想用rails更好地學習AJAX,並且我發現這些文檔寫得不是很好。

用戶控制器

def index 
if !params[:sort_by].nil? && !params[:order_by].nil? 
    @users = User.order("#{params[:sort_by]} #{params[:order_by]}").paginate(page: params[:page]) 
    respond_to do |format| 
    format.js {} 
    end 
else 
    @users = User.paginate(page: params[:page]) 
end 

被吸入

<% provide(:title, 'All users') %> 
<% if signed_in? && !current_user?(@user) %> 
    <h1>All users</h1> 

    <%= will_paginate %> 
    <table id="user_table" border="1"> 
     <tr> 
      <th>Avitar 
      <th id="name"class="ajax-header">Name 
      <th id="email" class="ajax-header">Email 
      <th id="accepted" class="ajax-header">Accepted 
      <th id="admin" class="ajax-header">Admin 
      <th>Delete 
     </tr> 
      <ul class="users"> 
       <%= render @users%> 
      </ul> 
    </table> 
    <%= will_paginate %> 
<% else %> 
    Only an admin can view this page. 
<% end %> 

上述這種觀點是什麼是繪製的圖。 <%= render @ users%>調用partial並繪製表格的其餘部分。

正如我所說看着日誌我正確地擊中用戶控制器,但我只是不知道如何強制渲染重繪。我可以在rails中做到這一點,但我想練習我的js。

+0

如果你想要一個很好的答案,你能幫助我們澄清究竟是你想要發生什麼嗎? – Alex

+0

我試過了。點擊標題後,javascript被調用,命中用戶控制器,導致用戶現在處於不同的順序。我不知道現在如何顯示新用戶。在ruby html中,render @users繪製表格。 – Brandon

回答

0

好吧,我發現使用JavaScript並不是最好的答案。相反,如果將DESC設置爲ASC並且ASC設置爲DESC,則將row_tos替換爲列標題,並檢查params [:order_by]是否爲零。