【问题标题】:Implementing Rails 3 template handlers实现 Rails 3 模板处理程序
【发布时间】:2011-06-16 18:44:08
【问题描述】:

似乎没有太多关于 Rails 模板处理程序的文档。包含的处理程序,如 RJS、ERB 和 Builder,可提供一些帮助。

我正在尝试实现我自己的,我已经成功了,尽管代码有点奇怪,或者可能有一些我不太理解的东西。

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

所以奇怪的是我必须调用inspect,否则 Rails 会尝试将字符串作为 Ruby 代码进行评估。

我的印象是 include ActionView::...::Compilable 就是这样做的(我的代码中没有包含)。

现在,如果我让我的模板“可编译”(通过使用 include... 语句),它仍然会寻找 call 方法而不是 compile 方法。

那么有人可以向我解释一下这是如何工作的吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 actionview


    【解决方案1】:

    我自己也遇到过这个问题。基本上,rails 期望渲染器的 .call 方法返回将渲染您的模板的 ruby​​ 代码。然后dynamically generates a method 运行此代码,并将其注入到模块中。

    该模块包含所有 url/应用程序助手,这意味着它们在模板的范围内。

    因此,在回答您的问题时,解决方案是让.call 返回一些将您渲染的模板输出为字符串的 ruby​​ 代码,或者让它渲染调用您的模板引擎的 ruby​​ 代码。

    【讨论】:

      【解决方案2】:

      看看tilttemple,我学到了很多关于模板引擎阅读他们代码的知识。

      【讨论】:

        猜你喜欢
        • 2011-10-14
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 2016-09-30
        • 2011-09-07
        • 2012-02-05
        • 2011-04-15
        • 2011-10-26
        相关资源
        最近更新 更多