2011-09-26 77 views
3

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

,我不能輕易只提取 「的真正來源。」

任何想法如何做到這一點?

預先感謝您!

+1

您是否找到解決方案?因爲我試圖做這樣的事情,但我無法得到「真正的」來源。 – basgys

回答

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必須由開始-end語句包裹。否則會引發語法錯誤。