从html.erb文件中移出不显眼的javascript

时间:2012-11-04 20:50:49

标签: ruby-on-rails unobtrusive-javascript

我的一个视图中有一个html.erb文件。该文件非常大,有大约2/3的javascript代码和1/3 html。我不喜欢这个文件太乱了。 javascript部分主要是事件处理程序和jquery UI组件的使用,如日期选择器,对话框等,用于页面中相应的html元素。我想将javascript部分与html部分分开。

  1. 我可以将javascript移动到单独的js.erb文件中并像部分文件一样使用吗?这有什么好处?

  2. 当我使用像I18n。()和<%= form_authenticity_token%>这样的rails API时,如何将javascript移动到静态.js文件。我应该每次都将它们传递给包装javascript函数吗?有更好的方法吗?

  3. 如果我将javascript移出html.erb文件会有助于缓存/渲染html.erb页面吗?

  4. 有兴趣了解是否有任何可重复使用的模式

    html.erb文件中的示例代码:

     <% content_for :javascript do %>
     <script type="text/javascript">
    
     $(document).ready(function() 
     {
         $('#create_segment_dialog').dialog({
                title: "<%= I18n.t("segment.create_segment_title") %>",
    
         // lots of javascript
    
    
     }
    
     </script>
     <%end %>
    
     //HTML starts here
    
     <div id="right-column">
    

1 个答案:

答案 0 :(得分:3)

我的2c,但我知道对此有不同意见:

尝试将尽可能多的JS代码分离到一个或多个函数中,并将它们放入资产管道中的JS文件中。利用此举将您的JS分解为可供其他方法/控制器使用的可重用组件。

这意味着您可以获得移动到那里的JS的资产管道的所有好处:

  • 缓存&amp;指纹识别您的JS资产
  • 缩小&amp;压缩支持以节省带宽
  • 如果你想要的话,缩小你的代码是模糊的
  • 连接JS文件以减少浏览器必须执行的请求数
  • 从其他位置(CDN,网络层与应用层)提供资产的可能性
  • 如果其他方法/控制器使用该JavaScript,则改进DRYness

缺点?正如您所指出的,任何Rails变量都必须作为参数传递给函数。

将JavaScript移动到.js.erb partial是一个选项,但如果此代码非常特定于特定方法或控制器,那么它不一定会改善DRYness - 它可以通过分离使代码更具可读性HTML和JS。