3

我将 Kaminari gem 用于我的 ruby​​ on rails 应用程序(对于仍在使用 will_paginate 的任何人,我建议考虑切换!更清洁,更通用)。

我遇到的问题是我想在进行 AJAX 分页时指定一个控制器操作,即。让我的分页远程工作,例如:

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

默认情况下,当我设置 :remote => true 并将以下几行添加到我的“页面”控制器 home.js.erb 文件中时,它可以在我的主页上运行。我什至不需要指定要引用哪个 js 部分;它会自动选择。

  $('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>');
  $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>')

但要注意的是,这个“概要”div 是我在应用程序的许多不同页面上呈现的部分内容。因此,在控制器不是我的“页面”控制器的页面上,远程分页不再起作用。

一种解决方案是将这两行添加到我的许多不同控制器中的 js.erb 文件中。但这将是多余和不雅的。

我希望能够在“分页”调用中指定用于远程调用的控制器和操作。然后我想我会写一个像这样的动作:

 def paginate_remotely
     respond_to paginate_remotely.js
 end

我怎么能做到这一点?这似乎是一个简单的问题,但我无法弄清楚。以下肯定行不通:

 <%= paginate @feed_exchanges, :param_name => :exchange_page, :remote => true, :controller => :exchanges, :action => :paginate_remotely %>
4

1 回答 1

8

对于那些感兴趣的人,答案是您必须在 :params 规范下指定控制器和操作,如下所示:

 <%= paginate @feed_exchanges, :params => {:controller => :exchanges, :action => :paginate_remotely}, :param_name => :exchange_page, :remote => true %>

不要忘记在 config/routes.rb 中定义此操作的路由,并创建一个 js 部分,在我的例子中称为 paginate_remotely.js.erb,包含:

 $('.synopsis').html('<%= escape_javascript render('exchanges/synopsis', :feeds => @feeds)%>');
 $('.paginator').html('<%= escape_javascript(paginate(@feeds, :param_name => :page, :remote => true).to_s)%>')
于 2011-10-30T00:23:48.773 回答