我正在使用Rails 3.1,我正在尝试使用两个模板处理程序处理文件。
好吧,我已经为.scss文件注册了一个新的模板处理程序。现在想处理像这样的文件:
应用程序/视图/ custom_css / stylesheet.css.scss.erb
通过2个模板处理程序。第一个ERB和之后的SCSS。这样我们就可以拥有动态scss文件。
我试过这个模板处理程序:
class ActionView::Template::Handlers::Sass
def initialize options = {}
@options = options
end
def erb_handler
@erb_handler ||= ActionView::Template.registered_template_handler(:erb)
end
def call template
source = erb_handler.call(template)
<<CODE
compiler = Compass::Compiler.new *Compass.configuration.to_compiler_arguments
options = compiler.options.merge(#{@options.inspect})
Sass::Engine.new(source, options).render
CODE
end
end
但是,在这种情况下,来源等于:
"@output_buffer = output_buffer || ActionView::OutputBuffer.new;@output_buffer.safe_concat('$background_color: \"#ff0000\";\n\n$test: ');@output_buffer.append= ( 'test' );@output_buffer.safe_concat(';\n\n.container {\n background-color: $background_color;\n}\n');@output_buffer.to_s"
我不能轻易提取“真正的来源”。
有什么想法可以做到这一点?
提前谢谢!
答案 0 :(得分:0)
Rails 3.1 Asset Pipeline不支持堆叠预处理器吗?
http://asciicasts.com/episodes/279-understanding-the-asset-pipeline
答案 1 :(得分:0)
您所要做的就是像ERB一样返回一个字符串。
这是我的处理程序内联CSS代码:
module EmvHandler
def self.erb_handler
@@erb_handler ||= ActionView::Template.registered_template_handler(:erb)
end
def self.call(template)
compiled_source = erb_handler.call(template)
options = {
:warn_level => Premailer::Warnings::SAFE,
:with_html_string => true
}
"Premailer.new((begin;#{compiled_source};end), #{options}).to_inline_css"
end
end
compiler_source 必须由begin-end语句包装。否则会引发语法错误。