js.erb在本地工作但不在生产中

时间:2016-10-15 01:41:17

标签: javascript jquery ruby-on-rails infinite-scroll will-paginate

我按照这里的教程http://railsforbeginners.com/chapters/chapter-9-infinite-scroll/进行无限滚动。代码在本地运行良好,但是当我将其部署到prod时。分页链接(1 2 3 4)仍然显示,无限滚动不会触发。我还尝试在assets.rb中添加这些文件但没有成功

首先我使用Rails 4,我的application.js看起来像这样

//= require jquery2
//= require jquery.turbolinks
//= require jquery_ujs
//= require jquery-ui.min
//= require bootstrap-hover-dropdown.min
//= require bootstrap.min
//= require select2
//= require infinite_scroll
//= require turbolinks

Controller action

respond_to do |format|
      format.html
      format.js { render "visitors/index" }
end

index.js.erb

$('#my-articles').append('<%= j render @articles %>');
<% if @articles.next_page %>
$('.pagination').replaceWith('<%= j will_paginate @articles %>');
add_tweets();
<% else %>
$(window).off('scroll');
$('.pagination').remove();
<% end %>



function add_tweets(){
  <% @articles.each do |article|%>
    handle_open_modal("<%= article.id %>");
  <%end%>

}

3 个答案:

答案 0 :(得分:0)

assets.rb

试试这一行:

config.assets.precompile += ['Index.js'] 

- &GT; Rails只能通过其(非ERB)资产文件名

引用文件

另外,作为一种风格问题,你应该将文件名小写为:index.js.erb

答案 1 :(得分:0)

你确定jQuery正在加载吗?如上所述,通过开发人员工具网络并重新加载。 您的资产是否在生产环境中预编译? 确保config / application.rb中有config.serve_static_assets = true 对于Heroku和Rails 4,请参阅here

答案 2 :(得分:0)

以下是我使用它所做的工作 This Reference

我删除了turbolinks及其所有参考资料

然后将其添加到index.html.erb,而不必使用jQuery $(document).on('ready

if ($('#infinite-scrolling').size() > 0){
        $(window).on('scroll', function(){
          var more_posts_url = $('.pagination .next_page a').attr('href')
          heights = $(document).height() - $(window).height() - 500
            if(more_posts_url && $(window).scrollTop() > heights){
                $('.pagination').html('<img src="/assets/ajax-loader.gif" alt="Loading..." title="Loading..." />')
                $.getScript(more_posts_url)
            }
        });
    }

然后所有*.js.erb开始工作。

我试图避免移除turbolinks,但试图让它与它一起工作。