【问题标题】:Multiple pagination with kaminari via AjaxMultiple pagination with kaminari via Ajax
【发布时间】:2012-02-19 11:26:57
【问题描述】:

我想通过 Ajax 使用 Kaminari 应用多个分页现在这是我的控制器代码

def user_note
    @user = current_user
    @notes = Bookmark.where('user_id = ? && note is not NULL',current_user.id).order('created_at DESC').page(params[:page_1]).per(4)

    @bookmarks = Bookmark.where('user_id = ? && note is NULL',current_user.id).order('created_at DESC').page(params[:page_2]).per(4)

    respond_to do |format|
      format.html
      format.xml{ render :xml => @user}
    end   end

现在对于视图,我有两个部分来渲染这个数组

<div id="bookmarks">
<%= render :partial =>"users/bookmark",:locals => { :bookmark => @bookmarks} %>
            </div>
<%= paginate @bookmarks,:remote => true, :param_name => 'page' %>

内部部分是

<% bookmark.each do |bookmar| %>
  <%= render :partial => 'show_bookmark.html.erb' , :locals => { :bookma => bookmar} %>
<%end%>

分页更新脚本正在单独的文件中处理

$('#bookmarks').html('<%= escape_javascript render(:partial =>"users/bookmark",:locals => { :bookmark => @bookmarks}) %>');
$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true).to_s) %>');

但是通过做每一件事,它并没有更新到页面状态,也没有包含在页面中。

【问题讨论】:

标签: ajax ruby-on-rails-3 pagination kaminari


【解决方案1】:

您在这一行缺少传递参数

$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true).to_s) %>');

我觉得应该是这样的

$('#paginator').html('<%= escape_javascript(paginate(@bookmarks, :remote => true, :param_name => 'page_2').to_s) %>');

而且你在这一行也传递了错误的参数

<%= paginate @bookmarks,:remote => true, :param_name => 'page' %>

应该是这样的

<%= paginate @bookmarks,:remote => true, :param_name => 'page_2' %>

另外请检查您是否将响应正确发送到 JS 文件。

【讨论】:

    【解决方案2】:

    我发现这个问题是为了在同一页面上对多个模型进行分页。我不清楚 @notes 集合的分页是如何工作的,但如前所述,解决方案只会通过 AJAX 对 @bookmarks 集合进行分页。

    如果您想通过 html 维护两个集合的分页,或者如果您更改 js 文件以呈现两个集合,则会出现问题。

    我为我的类似问题实现了一个解决方案,如下所示:

    1. 呈现带有两个部分的模板的 html 视图:一个用于 @notes(包括其分页助手),另一个用于呈现 @bookmarks 及其分页助手
    2. 标有remote: true的分页链接
    3. 一个重新渲染两个部分的 js 视图,类似于

      $('#notes_container').html('<%= j(render partial: 'paginated_notes_list') %>');
      $('#bookmarks_container').html('<%= j(render partial: 'paginated_bookmarks_list'); %>');
      
    4. 这是关键:以其他模型的当前页面为参数的分页链接。这样您就不会“丢失”您在其他模型中所在的页面。

      <%= paginate @notes, param_name: 'page_1', params: {page_2: params[:page_2]} %>
      <%= paginate @bookmarks, param_name: 'page_2', params: {page_1: params[:page_1]} %>
      

    同样,我不太清楚提问者的系统应该如何运行,但此解决方案将允许用户通过 AJAX 或 html 浏览两个模型,而不会丢失其在另一个模型中的“位置”。

    【讨论】:

      猜你喜欢
      • 2012-04-17
      • 2022-12-02
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      相关资源
      最近更新 更多