ERBテンプレートの内部にEJSテンプレートを埋め込みます
-
12-10-2019 - |
質問
JavaScriptが多いRails 3アプリを構築しています。 underscore.jsを使用します。 http://embeddedjs.com/).
問題:EmbedDedJSはERB構文から大きく借用します。これにより、ERBテンプレートにEJSテンプレートを含めることで、ビューで問題が発生します。
ERBファイルに「非ERB」セクションを含める方法はありますか?これにより、ERBファイル内のEJSテンプレートを定義できます。現在、EJSテンプレートを含むファイルの生の内容を読み取り、ERBテンプレートに生文字列として出力するヘルパーがあるハックを使用しています。
解決
このトリックを使用して問題を解決します。
// Using custom tags to be able to use regular for templates in templates
var ejs = require('ejs');
ejs.open = '{{';
ejs.close = '}}';
// Using html extension for custom ejs tags
app.register('.html', ejs);
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
これにより、<%%>に{{}}に変更され、JSが使用するテンプレートに<%%>を使用できます。クラシックなスタイルのテンプレート(<%%>)がないので、これは私に役立ちます。
それらの多くがある場合は、同じトリックをやりたいと思うかもしれませんが、underscore.jsテンプレートについて。
他のヒント
EJSを別々のファイルとして保存し、スクリプトタグ内のテキスト(ERBとして評価されない)としてレンダリングすることができます。
あなたのERBの内部部分:
<script id="my_awesome_template" type="text/x-ejs">
<%= render :text => File.open("app/views/controller_name/_my_awesome_template.html.ejs").read %>
</script>`
JavaScriptファイルで:
new EJS({element: document.getElementById('my_awesome_template')}).render(data)
あなたのアンダースコア変数を逃れる:(あなたがERBに補間を望まないもの)
<%= foo %> becomes:
<%%= foo %>
所属していません StackOverflow