在 Rails 3.1 应用程序中,一个 Controller 需要使用一组自定义变量让其所有 View 根据请求编译它们可能需要的任何 Sass 样式表。理想情况下,编译必须通过 Assets 管道进行,以便生成基于内容的 Assets 名称(包含内容的 MD5 哈希的名称)。对于解决方案而言,重要的是使用纯 Sass 功能,而不是诉诸于例如 Sass 样式表的 ERB 处理。
根据我在这里和其他地方所做的研究,以下似乎是一种可能的方法:
设置变量访问
使用自定义 Sass 函数创建某种类型的变量访问器桥接器,例如 Konstantin Haase 中描述的here (gist)。这看起来很容易做到。
通过 Sass 部分配置所有变量访问,例如,在
_base.sass
中,这是 Compass 方式。部分可以使用上面定义的自定义函数。也很简单。
捕获所有 Assets 引用
装饰 View 对象的
asset_path
方法。我有这个运作良好。使用
Sprockets::Environment
的自定义子类解析引用。这也很有效。
无论文件修改时间如何,都强制重新编译 Assets
我还没有找到好的解决方案。
我见过通过实例化一个新的
Sass::Engine
并传递将在Sass::Script::Functions::EvaluationContext
中可用的自定义数据来手动启动 Sass 处理的示例。 .这种方法的问题是我必须自己管理文件命名和路径,而且我总是冒着可能偏离 Sprockets 所做的事情的风险。我找不到任何在每个请求的基础上强制 Sprockets 处理的示例,无论文件修改时间如何,这也允许自定义变量传递。
对于一般方法的评论以及关于如何最好地处理 (3) 的任何具体指示/建议,我将不胜感激。
最佳答案
关于ruby-on-rails-3 - 在 Rails 3.1 下根据请求使用自定义变量编译 Sass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373062/