由两个模板处理程序处理文件

时间:2011-09-26 17:39:29

标签: ruby-on-rails erb sass

我正在使用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"

我不能轻易提取“真正的来源”。

有什么想法可以做到这一点?

提前谢谢!

2 个答案:

答案 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语句包装。否则会引发语法错误。