【问题标题】:Asset Pipeline and Rails 3.1 JS library specific to only one page in one controllerAsset Pipeline 和 Rails 3.1 JS 库特定于一个控制器中的一个页面
【发布时间】:2012-01-31 07:29:24
【问题描述】:

我认为文档http://guides.rubyonrails.org/asset_pipeline.html 需要澄清一下。他们说:

例如,如果生成了一个 ProjectsController,就会有一个新的 文件位于 app/assets/javascripts/projects.js.coffee 和另一个位于 应用程序/资产/样式表/projects.css.scss。你应该把任何 JavaScript 或 CSS 对各自资产中的控制器来说是唯一的 文件,因为这些文件可以为这些控制器加载 使用 等行 或 。

据我了解,在生产模式下,最好将所有 JS 打包到一个优化文件中。我猜这个优化文件的缓存比让页面自己专门加载不同的 JS 文件集更可取。

也许 javascript_include_tag 的目的是为该页面运行一些特定的 javascript。但是,application.js 的默认设置是包含树,其中包含生成的文件。所以我猜这必须调整为不包含任何特定于控制器的 javascript。

这里Using Rails 3.1, where do you put your "page specific" javascript code?的这个答案似乎暗示了一种处理问题的合理方法是将JS特性与div关联起来,当JQuery在页面上看不到div时,什么都不执行。

那么最佳做法是什么?我对控制器特定 div 的理解是否正确?在 application.js 中包含树的默认设置是否与控制器特定 js 的目标冲突?

【问题讨论】:

    标签: ruby-on-rails-3.1 asset-pipeline


    【解决方案1】:

    在我看来,你不应该依赖 application.js 脚手架。 application.js 需要整个树,但这样做是为了便于启动项目,并不意味着它应该保持这种状态。

    您可能会创建不同的文件“捆绑”,其中一些只会包含在特定页面中。
    例如,我的 application.js 只需要库和应用程序文件夹中的每个文件。这样你仍然可以拥有特定于页面的 js。

    我猜<%= javascript_include_tag params[:controller] %> 如果您有特定于某个控制器的大 javascript 文件,那可能会很有用。

    【讨论】:

      【解决方案2】:

      确实有冲突 - 您应该选择一种方法 (require_tree) 或另一种方法(加载每个控制器文件)。

      第一个是最优的,使用 css 类来定位特定于页面的 js 很简单。

      您不想这样做的唯一情况是管理部分(您将在其中使用第二个清单)或其他一些专业功能,例如仅在特定页面上的灯箱画廊(因此您不希望网站上到处都是额外的 js 和 css)。

      【讨论】:

        猜你喜欢
        • 2013-04-27
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 2011-11-17
        • 2011-12-18
        • 2011-11-07
        • 2011-11-24
        • 2011-12-23
        相关资源
        最近更新 更多