私は、アプリケーション内でJavascriptMVCとejsテンプレートを使用してクライアントで複雑な機能を実行しています。残念ながら、ejs構文はerb構文と非常によく似ています。つまり、同じファイルにコードを保存できないという点です(ただし、誰かがこれを行う良い方法を知っていれば、私は恍惚とします)。最終的には、ejsテンプレート内でいくつかのレールコードを適用できるようにしたいと考えていますが(I18nなど)、現時点ではこれを実現するために解決するだけです。カスタムハンドラを使用したRailsの部分テンプレートがエスケープしています。
this questionの例では、その後、私はそれで私のEJSコードを持っている部分テンプレート作成
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
::次のようになり、私の既存のテンプレートの中で _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;
I私はここにはっきりと何かが不足していると確信していますが、何ができるのかわかりません。どうすればhtmlのすべてをエスケープせずにテンプレートベースのテンプレートをインクルードするだけですか?
編集:
私はhtml_safe作品とレンダリングを呼び出すことがわかってきました:
<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %>
これはしかしその場しのぎのように思えるが - 治療するERBレンダラを取得する方法がなければなりません私のハンドラからのテキストをHTMLの安全なテキストとして返します。
だからあなたの 'DEF compile'と' <%=レンダリング...%> 'バック「ではないHTML安全」モードにそれを送信した文字列に何かをやっている間に何か。 –
意味がありますが、それは何ですか?私はそうでなければRails 3.1をそのまま使用しています... –
Maybeeはrawを使うべきです。 【H対html_safe VS RAW]チェック[1] [1]:http://stackoverflow.com/questions/4251284/raw-vs-html-safe-vs-h-to-unescape-html – charlysisto