在使用AJAX的Rails中,如何更改它加载的js文件?

时间:2015-03-18 05:47:26

标签: ruby-on-rails kaminari

例如,我使用数据远程进行分页,如下所示:

<%= paginate @products, :remote => true %>

有效。但问题是我有一个页面分页的多个列表。所以,我需要一种方法将调用发送到单独的文件,以便我可以呈现适当的内容。我怎么能这样做?

我的index.js.erb:

<% if params[:list] %>
   $('#products').html('<%= escape_javascript render(@products) %>');
   $('#paginator').html('<%= escape_javascript(paginate(@products, remote: true, param_name: 'list' ).to_s) %>');
<% end %>

1 个答案:

答案 0 :(得分:1)

为此,您需要添加另一个paginate参数。

<%= paginate @products, :remote => true, :param_name => param_name %>

此参数名称将作为参数传递给控制器​​,以便您可以控制要调用的ajax分页。

如果您正在调用相同的操作,那么根据参数名称,您也可以更改@products的值。您还需要在xxxx.js.erb文件中考虑另外一件事,即需要渲染分页对象。

在你的js文件中,你也可以在param的基础上改变html。

- if params[:xxx]
  $('#xxx').html('#{escape_javascript render(:partial =>"partial_name",:locals => { :posts => @products, :param_name => 'xxx'})}');
  $('#xxx #paginator').html('#{escape_javascript(paginate(@products, :remote => true, :param_name => 'xxx').to_s)}');
- if params[:yyy]
  $('#yyy').html('#{escape_javascript render(:partial =>"partial_name",:locals => { :posts => @products, :param_name => 'yyy'})}');
  $('#yyy #paginator').html('#{escape_javascript(paginate(@products, :remote => true, :param_name => 'yyy').to_s)}');

在您的控制器中,您应该使用param_name而不是参数page