Ruby on rails 如何轻松地将变量传递到.sass文件中?
在Rails项目内部,有一个变量可以说明我们希望Rails应用程序作为哪个站点运行——例如,对于汽车或船只,以及 如果是汽车站点或船站点,则应该有不同的CSS精灵(站点徽标位于精灵内部)。传递此变量值的好方法是什么:“汽车”还是“船” 进入.sass文件,以便.sass文件将使用spriteRuby on rails 如何轻松地将变量传递到.sass文件中?,ruby-on-rails,sass,Ruby On Rails,Sass,在Rails项目内部,有一个变量可以说明我们希望Rails应用程序作为哪个站点运行——例如,对于汽车或船只,以及 如果是汽车站点或船站点,则应该有不同的CSS精灵(站点徽标位于精灵内部)。传递此变量值的好方法是什么:“汽车”还是“船” 进入.sass文件,以便.sass文件将使用spritepublic/images/sprites/sprite cars.png或public/images/sprites/sprite boats.png 一种可能的方法是在config/initializer
public/images/sprites/sprite cars.png
或public/images/sprites/sprite boats.png
一种可能的方法是在config/initializers
Sass::Plugin.options[:load_paths] = ["#{RAILS_ROOT}/app/views/templates/#{SITE_NAME}/"]
在app/views/templates/cars/
中放置一个\u site\u variables.sass
并添加一行
@import "site_variables"
在main.sass文件中。在\u site\u variables.sass
中,只需
$site_sprite_path: '/images/sprites/sprites-cars.png'
这是可行的,但是仅仅传递一个变量需要做很多工作。有更简单的方法吗?推荐的方法是定义自定义Sass函数(请参阅),并使用
:custom
选项传入特定变量。Sass文档介绍了如何添加自定义配置变量的选项,并提到了该选项
例如,假设您想要一个函数来显示当前年份。制作一个包含以下内容的文件lib/sass_year.rb
:
require 'sass'
require 'sass/script'
module Sass::Script::Functions
def year
Sass::Script::Value::String.new(Sass::Plugin.options[:custom][:year])
end
end
然后,在像environment.rb
这样的地方,包括并配置它,如下所示:
require Rails.root+'lib/sass_year'
require 'sass/plugin'
Sass::Plugin.options[:custom] ||= {}
Sass::Plugin.options[:custom][:year] = Time.now.year.to_s
现在,您可以在Sass代码中使用以下函数:
div#copyright
content: "© 2001–#{year()} XYZ Corporation"
您可以访问环境变量或其他配置数据,而不是当前年份。请注意,如果没有
to_s
,您将得到一个损坏的字符串,调试时请确保定期清除tmp/cache
,以强制重新生成样式表。免责声明:我不想破坏@pdg137的答案,但我的代码太大,无法发表评论。请投他一票!没有他我是不会来这里的
以下是我的实现: sass_helper.rb foo.html.erb foo.scss 这在外部公开了一个散列生成方法,我可以使用它作为选项传递给SASS插值使用
说明您不能调用外部方法,因为存在
执行上下文
,这反过来又解释了使用的狭条排印:自定义
和选项
Hi@動靜能量, 你能提供一个你为这个做了什么的示例代码吗?我也需要同样的东西,但我无法找到最好的方法?
require 'sass'
require 'sass/script'
module SassHelper
def generateHash
"asdf"
end
module Sass::Script::Functions
def foo()
Sass::Script::Value::String.new(options[:custom][:test])
end
end
end
se = Sass::Engine.for_file('foo.scss', :syntax => :scss, :custom => { :test => generateHash })
body-#{foo()} { ... }