rails AJAX js.erb相同路由更多动作

我有带有引导选项卡的rails4应用程序。 我有所有选项卡的root /common_medias ,并在用户单击给定选项卡时为每个选项format.js载带有AJAX + format.js + js.erb的数据。 我的问题是我还想在will_pagination gem的帮助下进行无限滚动,但是js.erb文件已经用于加载初始数据。 目前bootstarp tab js action和will_pagination js action都指向同一个url,所以两者都尝试使用相同的js.erb,这会导致一些问题。

什么是好的解决方法? 创建一个新的控制器动作,这样就会有分开的js.erb文件(由于分页和原始数据将被分开,这个文件似乎很奇怪)。 或者我应该在单个js.erb文件中使用条件来检查触发操作是什么(在选项卡单击/滚动上加载数据)。 我不知道如何实现其中的任何一个,所以请提供一些基于我的优选方式的代码。

common_medias.html.erb

  
#LOADED BY JS ON TABCLICK
...

common_medias控制器

  def common_medias @param_id = request.parameters['user_id'] @user = User.find(@param_id) @conversation ||= Conversation.between(current_user.id, @user.id).first @common_files = @conversation.messages.with_file.order(created_at: :desc).paginate(page: params[:files], per_page: 3) if params[:tab] == "file" @common_files = @conversation.messages.with_file.order(created_at: :desc).paginate(page: params[:files], per_page: 3) end #messages can have multiple links, but with the following each link can be displayed separately with files if params[:tab] == "link" @message_links_pre = @conversation.messages.with_link.order(created_at: :desc).paginate(page: params[:links], per_page: 3) @message_links = @message_links_pre.map { |f| { link: f.link, created_at: f.created_at, user_id: f.user_id} }.flatten @common_links = formatting_links(@message_links) end if params[:tab] == "calendar" #implementing later end respond_to do |format| format.html format.js end end 

common_medias.js

 $(document).on("page:change", function() { //infinite scrolling for tasks based on pagination gem if ($('#infinite-common-file-scrolling').size() > 0) { $(window).on('scroll', function() { $('#infinite-common-file-scrolling').hide(); var more_common_files_url; more_common_files_url = $('#infinite-common-file-scrolling .pagination .next_page a').attr('href'); if (more_common_files_url && $(window).scrollTop() > $(document).height() - $(window).height() - 60) { $('.pagination').html('Loading...'); $('#infinite-common-file-scrolling').show(); $.getScript(more_common_files_url); } }); }; if ($('#infinite-common-link-scrolling').size() > 0) { $(window).on('scroll', function() { $('#infinite-common-link-scrolling').hide(); var more_common_links_url; more_common_links_url = $('#infinite-common-link-scrolling .pagination .next_page a').attr('href'); if (more_common_links_url && $(window).scrollTop() > $(document).height() - $(window).height() - 60) { $('.pagination').html('Loading...'); $('#infinite-common-link-scrolling').show(); $.getScript(more_common_links_url); } }); }; }); $(document).on('shown.bs.tab', 'a[data-toggle="tab"]', function (e) { var target = $(this).data("activetab"); var href = $(this).data("link"); $.ajax({ type: "GET", url: href, data: {tab: target}, dataType: "script" }); }); 

common_medias.js.erb

 //tabclick code  var filebody = $('.tab-pane.active'); filebody.html('');  var linkbody= $('.tab-pane.active'); linkbody.html('');  //CODE SHOULD RECOGNIZE WHICH ONE TO INVOKE //pagination code for files $('.tab-pane.active').append;  $('#infinite-common-file-scrolling .pagination').replaceWith('');  $(window).off('scroll'); $('#infinite-common-file-scrolling .pagination').remove(); $('.no-more').delay(1000).fadeIn(1500);  //pagination code for links $('.tab-pane.active').append;  $('#infinite-common-link-scrolling .pagination').replaceWith('');  $(window).off('scroll'); $('#infinite-common-link-scrolling .pagination').remove(); $('.no-more').delay(1000).fadeIn(1500);  

UPDATE

更改选项卡效果很好(转到/ get_links,获取数据并呈现get_links.js.erb)。 Will_paginate gem在DOM(/ get_links)中显示正确的URL,但在滚动时,将呈现common_media.js.erb而不是get_links.js.erb。

common_medias控制器

 def common_medias @messages = @conversation.messages.includes(:user).order(created_at: :desc).limit(50).reverse @message = Message.new @common_files = @conversation.messages.with_file.order(created_at: :desc).paginate(page: params[:files], per_page: 3) # respond_to do |format| COMMENTED OUT STILL PAGINATION GOES FOR common_medias.js.erb # format.html # format.js # end end def get_links @message_links_pre = @conversation.messages.with_link.order(created_at: :desc).paginate(page: params[:links], per_page: 3) @message_links = @message_links_pre.map { |f| { link: f.link, created_at: f.created_at, user_id: f.user_id} }.flatten @common_links = formatting_links(@message_links) respond_to :js end 

common_medias.html.erb

  

common_media.js

 if ($('#infinite-common-link-scrolling').size() > 0) { $(window).on('scroll', function() { $('#infinite-common-link-scrolling').hide(); var more_common_links_url; more_common_links_url = $('#infinite-common-link-scrolling .pagination .next_page a').attr('href'); //SHOWS /get_links?will_paginate_params url here if (more_common_links_url && $(window).scrollTop() > $(document).height() - $(window).height() - 60) { $('.pagination').html('Loading...'); $('#infinite-common-link-scrolling').show(); $.ajax({ type: "GET", url: more_common_links_url, data: {scrolling: "linkscroll"}, dataType: "script" }); } }); }; 

common_medias.js.erb

 alert('whyyou'); 

get_links.js.erb

 alert('hahalinks');  $('.linkbody').append('');  $('#infinite-common-link-scrolling .pagination').replaceWith('');  $(window).off('scroll'); $('#infinite-common-link-scrolling .pagination').remove(); $('.no-more').delay(1000).fadeIn(1500);   var linkbody= $('.tab-pane.active'); linkbody.html('');  

first_image

second_image