5

アプリケーションで複雑な機能を実行するために、クライアント内で 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 は次のようにページにレンダリングされます。

&lt;div%gt;

ここで明らかな何かが欠けていると確信していますが、それが何であるかはわかりません.このテンプレートハンドラーに、すべてのhtmlをエスケープせずにejsベースのテンプレートを含めるにはどうすればよいですか?

編集:

render を html_safe で呼び出すと、次のように機能することがわかりました。

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

ただし、これは面倒なように思えます-erbレンダラーがハンドラーからのテキストをhtmlセーフテキストとして処理するようにする方法が必要です。

4

1 に答える 1

0

多分あなたは生を使うべきです。これをチェックして

def compile(template)
  raw template.source.inspect
end
于 2011-10-12T10:59:17.080 に答える