2011-09-30 3 views
5

私は、アプリケーション内で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要素は、次のようにページにレンダリングされる:

&lt;div%gt; 

I私はここにはっきりと何かが不足していると確信していますが、何ができるのかわかりません。どうすればhtmlのすべてをエスケープせずにテンプレートベースのテンプレートをインクルードするだけですか?

編集:

私はhtml_safe作品とレンダリングを呼び出すことがわかってきました:

<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %> 

これはしかしその場しのぎのように思えるが - 治療するERBレンダラを取得する方法がなければなりません私のハンドラからのテキストをHTMLの安全なテキストとして返します。

+0

だからあなたの 'DEF compile'と' <%=レンダリング...%> 'バック「ではないHTML安全」モードにそれを送信した文字列に何かをやっている間に何か。 –

+0

意味がありますが、それは何ですか?私はそうでなければRails 3.1をそのまま使用しています... –

+0

Maybeeはrawを使うべきです。 【H対html_safe VS RAW]チェック[1] [1]:http://stackoverflow.com/questions/4251284/raw-vs-html-safe-vs-h-to-unescape-html – charlysisto

答えて

0

あなたはrawを使用している必要があります。 Check this

def compile(template) 
    raw template.source.inspect 
end 
+0

ええ、あなたはそう思います - 残念ながら、それはどちらもうまくいきません。 Railsが私のテンプレートハンドラからの出力を自動的にエスケープしているかのようです。私はこの時点で見つけ出す必要のある何らかの設定がないのだろうかと思っています... –

関連する問題