2011-06-16 95 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代码。

相关问题