2011-06-16 66 views
4

看來Rails模板處理程序沒有太多文檔。有包括的處理程序,如RJ​​S,ERB和Builder,它們提供一些幫助。實現Rails 3模板處理程序

我試圖實現自己的,我已經成功,雖然有一些奇怪的代碼,或者可能有一些我不太明白。

class MyHandler < ActionView::Template::Handler 
    def call(template) 
    template.source.inspect 
    end 
end 

那麼,有什麼奇怪的是,我有打電話給inspect,否則Rails會嘗試EVAL字符串作爲Ruby代碼。

我的印象是這就是include ActionView::...::Compilable所做的(我不包括在我的代碼中)。

現在,如果我使我的模板「可編譯」(通過使用include...語句),它仍然會查找call方法而不是compile方法。

所以任何人都可以向我解釋一下這是如何工作的?

謝謝!

回答

0

檢查出tilttemple,我已經瞭解了很多關於模板引擎讀取他們的代碼。

4

我剛剛經歷了這個問題。基本上Rails期望渲染器的.call方法返回將呈現模板的ruby代碼。然後運行該代碼dynamically generates a method,並將其注入到模塊中。

該模塊包含所有url /應用程序助手,這意味着它們處於模板的範圍內。

因此,在回答你的問題時,解決方案是讓.call返回一些ruby代碼,將你的渲染模板作爲一個字符串輸出,或者爲它呈現調用模板引擎的ruby代碼。