我正在使用客户端中的 JavascriptMVC 和 ejs 模板开发 Rails 3.1 应用程序,以在我的应用程序上执行一些复杂的功能。不幸的是,ejs 语法与 erb 语法非常相似,以至于我无法将代码保存在同一个文件中(尽管如果有人知道这样做的好方法,我会欣喜若狂)。最终,我希望能够在 ejs 模板中应用一些 Rails 代码(比如 I18n),但此时我只会满足于让它工作
按照这个问题的示例,我创建了一个自定义模板处理程序,如下所示:
module CommonModel
class Handler < ActionView::Template::Handler
include ActionView::Template::Handlers::Compilable
def compile(template)
template.source.inspect
end
end
end
ActionView::Template.register_template_handler :ejs, CommonModel::Handler
然后我创建了一个包含我的 ejs 代码的部分模板:_jmvc_templates.html.ejs
<script type="text/ejs" id="my_ejs_template">
<div>Some ejs here</div>
</script>
在我现有的模板中,我尝试包含我的部分:
<%= render 'path/to/my/ejs/templates/jmvc_templates' %>
此时,该文件已包含在内并使用了我的处理程序,但所有内容都被转义了,因此我的模板中的 div 被渲染到页面上,如下所示:
<div%gt;
我确定我在这里遗漏了一些明显的东西,但我不知道它可能是什么......我怎样才能让这个模板处理程序只包含我的基于 ejs 的模板而不转义其中的所有 html?
编辑:
我发现使用 html_safe 调用 render 可以:
<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %>
不过,这似乎是一个杂项——必须有一种方法让 erb 渲染器将来自我的处理程序的文本视为 html 安全文本。