【问题标题】:Rail Asset Pipeline and Page Specific Files铁路资产管道和页面特定文件
【发布时间】:2012-06-27 12:09:26
【问题描述】:

在我的 rails 3.1 应用程序中,我有要为每个控制器中的每个操作加载的特定文件,例如users#index 需要 index.js 和 index.css 文件,而 users#show 需要 show.js 和 show.css 文件等。

但是,当我运行 rake assets:precompile 时,所有内容都会被合并到一个大的 application.css 和 application.js 文件中,这让我的观点大打折扣。除了在使用 rake assets:precompile 时执行“config.assets.precompile += %w(index.js show.css)”方法来避免这种行为之外,还有其他方法吗?我必须以不同的方式组织和命名我的文件吗?

【问题讨论】:

    标签: ruby-on-rails asset-pipeline


    【解决方案1】:

    我通过在我的 CSS 和 JavaScript 中应用适当的范围解决了这个问题。例如。我的布局文件的主体标签以下列方式被赋予一个动态 id:

    <body id="<%= "#{params[:controller]}-#{params[:action]}" %>" data-controller=<%= params[:controller] %> data-action=<%= params[:action] %>>
    

    在我的 users_index.css 文件中,该操作的范围和样式使用:

    body#users-index { .. }
    

    因此,我的 CSS 清单如下所示:

    /*
     *= require self
     *= require jqueryUi
     *= require_tree .
    */
    

    对于 JavaScript,我执行以下操作:

    APP = { init: function() { ... }, 
            users = { 
                      index: function() { 
                               //jQuery bindings here; 
                      }, 
                      show: function() {  
                            //More jQuery bindings here for this action;
                      }
             } 
           }
    

    现在,当页面加载时,我执行以下操作:

    (function() {
        action = $("body").data("action");
        controller = $("body").data("controller");
        APP.init();
        APP[controller][action]();
              })();
    

    有点变通办法,但我看到 Paul Irish 和他的伙伴们做 JavaScript 的事情,我看到 RailsCasts 的 Ryan Bates 做 CSS 方法,所以我想这不会是 100% 的错误做法。

    【讨论】:

      【解决方案2】:

      我猜我会说包含文件的顺序搞砸了。

      您通常需要的是任何样板代码,首先是您的 mamisfest,然后是您自己的站点范围的工作表,最后是操作表。

      所以您的 application.css 可能如下所示:

      /*
       *= require reset
       *= require formtastic
       *= require jquery-ui
       *= require formtastic_overrides
       *= require site
       *= require_tree . 
      */
      

      另一件可能会搞砸的事情是在关联文件中应用广泛的规则(例如p{color:green}),并期望仅为该操作提供服务。

      这不是管道的工作方式,如果这是您想要实现的目标,您需要为这些视图应用更具体的规则。

      就我个人而言,我不会使用所有这些生成的文件。我更喜欢将我的 CSS 放在几个文件中,这样我就可以在(大部分)一个地方看到它。我发现这更容易管理,但 YMMV!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 2015-01-28
        • 1970-01-01
        • 2012-03-04
        • 2016-03-16
        • 2023-03-24
        相关资源
        最近更新 更多