0

我正在尝试使用 javascript/ajax 重新排序表格。我有javascript工作

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 更改为 DESC 并再次返回并点击用户控制器索引操作的帖子。这会导致 @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%> 调用部分并绘制出表格的其余部分。

正如我所说,查看日志我正确地点击了用户控制器,但我只是不知道如何强制该渲染重绘。我可以在rails中做到这一点,但我想练习我的js。

4

1 回答 1

0

好的,我发现使用 javascript 并不是最好的答案。相反,我用 link_tos 替换了列标题,并检查了 params[:order_by] 是否为零,如果设置为 DESC,如果 DESC 设置为 ASC,并且 ASC 设置为 DESC。

于 2013-06-28T21:40:05.040 回答