アプリケーションで複雑な機能を実行するために、クライアント内で JavascriptMVC と ejs テンプレートを使用して Rails 3.1 アプリに取り組んでいます。残念ながら、ejs 構文は erb 構文と非常に似ているため、コードを同じファイルに保持することはできません (ただし、これを行う良い方法を誰かが知っていれば、私は有頂天になります)。最終的には、ejs テンプレート (I18n など) 内にいくつかの Rails コードを適用できるようにしたいと考えていますが、この時点では、これを機能させるために解決します。
この質問の例に従って、次のようなカスタム テンプレート ハンドラーを作成しました。
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;
ここで明らかな何かが欠けていると確信していますが、それが何であるかはわかりません.このテンプレートハンドラーに、すべてのhtmlをエスケープせずにejsベースのテンプレートを含めるにはどうすればよいですか?
編集:
render を html_safe で呼び出すと、次のように機能することがわかりました。
<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %>
ただし、これは面倒なように思えます-erbレンダラーがハンドラーからのテキストをhtmlセーフテキストとして処理するようにする方法が必要です。