ruby-on-rails-3 - 在 Rails 3.1 下根据请求使用自定义变量编译 Sass

标签 ruby-on-rails-3 ruby-on-rails-3.1 sass asset-pipeline sprockets

在 Rails 3.1 应用程序中,一个 Controller 需要使用一组自定义变量让其所有 View 根据请求编译它们可能需要的任何 Sass 样式表。理想情况下,编译必须通过 Assets 管道进行,以便生成基于内容的 Assets 名称(包含内容的 MD5 哈希的名称)。对于解决方案而言,重要的是使用纯 Sass 功能,而不是诉诸于例如 Sass 样式表的 ERB 处理。

根据我在这里和其他地方所做的研究,以下似乎是一种可能的方法:

  1. 设置变量访问

    • 使用自定义 Sass 函数创建某种类型的变量访问器桥接器,例如 Konstantin Haase 中描述的here (gist)。这看起来很容易做到。

    • 通过 Sass 部分配置所有变量访问,例如,在 _base.sass 中,这是 Compass 方式。部分可以使用上面定义的自定义函数。也很简单。

  2. 捕获所有 Assets 引用

    • 装饰 View 对象的asset_path方法。我有这个运作良好。

    • 使用 Sprockets::Environment 的自定义子类解析引用。这也很有效。

  3. 无论文件修改时间如何,都强制重新编译 Assets

    • 我还没有找到好的解决方案。

    • 我见过通过实例化一个新的 Sass::Engine 并传递将在 Sass::Script::Functions::EvaluationContext 中可用的自定义数据来手动启动 Sass 处理的示例。 .这种方法的问题是我必须自己管理文件命名和路径,而且我总是冒着可能偏离 Sprockets 所做的事情的风险。

    • 我找不到任何在每个请求的基础上强制 Sprockets 处理的示例,无论文件修改时间如何,这也允许自定义变量传递。

对于一般方法的评论以及关于如何最好地处理 (3) 的任何具体指示/建议,我将不胜感激。

最佳答案

模拟。

这是可能的。看这里SASS: Set variable at compile time

我写了一个解决方案来解决它,我会尽快发布并推送到这里,以防您或其他人仍然需要它。

关于ruby-on-rails-3 - 在 Rails 3.1 下根据请求使用自定义变量编译 Sass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373062/

相关文章:

css - Assets - 未加载 Css

css - 如何将特定样式应用于此输入框

css - 如何将外部 CSS 文件导入我的 Ember 应用程序?

css - 在没有 Compass 混入的情况下将 SCSS 转换为 SCSS

ruby-on-rails-3 - Rails 3 - Heroku PGError : ERROR: type modifier is not allowed for type "text"

mysql - 使用 Rails 项目的现有数据库

javascript - 根据单选按钮的选择显示/隐藏文本文件

Rails 3.1 中的 JavaScript 单元测试

ruby-on-rails-3 - bundle : Install gem from private github repository

ruby - 升级到 OSX 10.7.3 Lion 后修复 Postgresql