Ruby on rails 在jQuery中使用.css.scss变量?

Ruby on rails 在jQuery中使用.css.scss变量?,ruby-on-rails,json,ruby-on-rails-3.1,coffeescript,sass,Ruby On Rails,Json,Ruby On Rails 3.1,Coffeescript,Sass,我正在开发Rails 3.1应用程序,我很高兴使用SASS和CoffeeScript。我特别喜欢变量和导入的SASS扩展。我构建了一个_global-settings.css.scss文件,其中包含我在所有样式表中使用的所有十六进制常量值。这为我提供了一个管理颜色、字体和布局尺寸的单一位置。非常干燥 但是,如果我希望使用JQuery动态调整css,我将不再能够访问css编译时变量,并且必须在.js.coffee文件中复制与JSON哈希相同的数据。一点也不干 我的问题是:在我开始构建一个rake任

我正在开发Rails 3.1应用程序,我很高兴使用SASS和CoffeeScript。我特别喜欢变量和导入的SASS扩展。我构建了一个_global-settings.css.scss文件,其中包含我在所有样式表中使用的所有十六进制常量值。这为我提供了一个管理颜色、字体和布局尺寸的单一位置。非常干燥

但是,如果我希望使用JQuery动态调整css,我将不再能够访问css编译时变量,并且必须在.js.coffee文件中复制与JSON哈希相同的数据。一点也不干


我的问题是:在我开始构建一个rake任务,将css设置文件转换成一个等价的CoffeeScript散列之前,有人有更聪明的想法吗?就像将所有值隐藏在html文件的隐藏div中一样?

您可以更轻松地将CSS配置移动到Ruby中,然后通过ERB发送
\u global-settings.CSS.scss
和一小段咖啡脚本。然后你就有了你的设置,你可以在任何地方访问它们

在Ruby中的某个地方,您可以看到:

CSS_SETTINGS = {
    :text_color        => '#333',
    :text_color_hilite => '#f33',
    :font_size         => '14px',
    #...
}
window.app.global_settings = <%= CSS_SETTINGS.to_json.html_safe %>
然后将您的
\u global-settings.css.scss
重命名为
\u global-settings.css.scss.erb
,并在其中使用如下内容:

$text-color: '<%= CSS_SETTINGS[:text_color] %>';
// ...
您甚至可以编写一个简单的视图帮助程序,用于SASSify散列:

def sassify(h)
    h.map do |k, v|
        # You might want more escaping for k and v in here, this is just
        # a simple proof of concept demo.
        [ '$', k.to_s.gsub('_', '-'), ': ', "'#{v}'", ';' ].join
    end.join("\n")
end
然后你可以在你的
\u global-settings.css.scss.erb
中这样说:

// Import global CSS settings.
<%= sassify(CSS_SETTINGS).html_safe %>
//导入全局CSS设置。

你也可以将
to_sass
修补成散列,并使用
CSS\u设置。to_sass
但这可能走得太远了。

你可以更轻松地将CSS配置移动到Ruby中,然后通过ERB发送
\u global-SETTINGS.CSS.scss
和一小段咖啡脚本。然后你就有了你的设置,你可以在任何地方访问它们

在Ruby中的某个地方,您可以看到:

CSS_SETTINGS = {
    :text_color        => '#333',
    :text_color_hilite => '#f33',
    :font_size         => '14px',
    #...
}
window.app.global_settings = <%= CSS_SETTINGS.to_json.html_safe %>
然后将您的
\u global-settings.css.scss
重命名为
\u global-settings.css.scss.erb
,并在其中使用如下内容:

$text-color: '<%= CSS_SETTINGS[:text_color] %>';
// ...
您甚至可以编写一个简单的视图帮助程序,用于SASSify散列:

def sassify(h)
    h.map do |k, v|
        # You might want more escaping for k and v in here, this is just
        # a simple proof of concept demo.
        [ '$', k.to_s.gsub('_', '-'), ': ', "'#{v}'", ';' ].join
    end.join("\n")
end
然后你可以在你的
\u global-settings.css.scss.erb
中这样说:

// Import global CSS settings.
<%= sassify(CSS_SETTINGS).html_safe %>
//导入全局CSS设置。

您也可以将
to_sass
修补成散列,并使用
CSS\u设置。to_sass
但这可能走得太远了。

对此不确定,我相信您可以使用一个
constants.yml
文件列出全局值。我相信,这些文件可以通过ERB插入到资产文件中。但我自己还没有试过。@Flambino:这是正确的想法:将常量放在Ruby land中,然后使用ERB将它们放入SASS和CoffeeScript中。虽然我不知道
constants.yml
,但在应用程序初始化过程中添加
YAML.load\u文件
调用如果不是自动的,那就很容易了。@muistooshort我记得的contants文件是首次引入时的;在它集成到Rails之前。但那是很久以前的事了,因此我的评论中出现了“不确定”:@Flambino:也因此出现了我的“不知道……但是”:)我刚刚生成了一个新的3.1应用程序,我在任何地方都没有看到
常量.yml
,所以这可能是被删除的内容。@muistooshort是的,它似乎已经被删除了。我也只是在一个3.1的应用程序中玩了一下,但也没有找到任何东西。回答不错,顺便说一句,我不确定这一点,我相信你可以有一个
constants.yml
文件,在其中列出你的全局值。我相信,这些文件可以通过ERB插入到资产文件中。但我自己还没有试过。@Flambino:这是正确的想法:将常量放在Ruby land中,然后使用ERB将它们放入SASS和CoffeeScript中。虽然我不知道
constants.yml
,但在应用程序初始化过程中添加
YAML.load\u文件
调用如果不是自动的,那就很容易了。@muistooshort我记得的contants文件是首次引入时的;在它集成到Rails之前。但那是很久以前的事了,因此我的评论中出现了“不确定”:@Flambino:也因此出现了我的“不知道……但是”:)我刚刚生成了一个新的3.1应用程序,我在任何地方都没有看到
常量.yml
,所以这可能是被删除的内容。@muistooshort是的,它似乎已经被删除了。我也只是在一个3.1的应用程序中玩了一下,但也没有找到任何东西。回答得好,顺便说一句,谢谢你的好主意。我会研究它们,让它们发挥作用。谢谢你的好主意。我会研究它们,让它们发挥作用。