2016-05-13 109 views
0

我有几个js文件,我把它们放到vendor/assets/js。然后我需要他们在应用程序js文件中;Rails资产管道 - 只添加jquery头

​​

在页面顶部我需要jQuery和jquery_ujs属于jquery。现在,我加载应用程序js文件为;

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>  

的事情是,我有几个内部..html.erb文件,这首先需要在页面加载JS代码。但我想将它们合并到一个js文件中。我想要做的只是在head标签中调用jquery,并在body中调用应用程序js文件。但如果我删除jquery gem并将其称为;

<%= javascript_include_tag 'jquery.min', 'data-turbolinks-track' => true %>  

Rails给出了关于jquery_ujs的错误。当然,我也可以在那里添加jquery_ujs。但是,最佳做法是什么?

+1

涡轮链接的最佳实践是在头部添加尽可能多的脚本,并且只有绝对必要的脚本在体内。尝试将脚本从html.erb文件中的正文拉到头部,如果中断,只能将其移动到正文。 – Anand

回答

3

向您的rails应用程序添加页面特定js代码(从而避免在一个页面中只需要库或脚本时在每个页面中加载js)的最常用方式是添加到布局的最底部/application.html.erb文件的结束标记的前面:

<%= yield :javascript %> 

    </body> 
</html> 
的观点

然后你要找运行一些片段的JavaScript,你应该所有的HTML标签后把这个在它的最底层已关闭。确保它不在该视图内的任何div或任何内容中,而是位于其底部。

更新引用弗雷德:

<%= content_for :javascript do %> 
    <script type="text/javascript"> 
    $(document).on('page:load', function() { 
     all your code here.. 
    }); 
    </script> 
<% end %> 

此代码现在将屈服于你的布局视图底部仅载入你需要,而不是在你的资产/ JS与所有其他资产被串联沿着具体意见夹。我使用所有不是应用程序范围的自定义js来执行此操作,并且维护/调试非常简单。

+1

启用turbolinks后,我们不应该绑定到ready事件,而是在page:load(或turbolinks:load for turbolinks 5)上,否则当从浏览器缓存中获取页面时不会调用它 – Fred