5

javascript を多用する Rails 3 アプリを作成しています。これは、ejs ( http://embeddedjs.com/ ) の上に構築された非常に洗練されたテンプレート メカニズムを持つ underscore.js を使用します。

問題: embeddedjs は erb 構文から多くを借用しているため、erb テンプレートに ejs テンプレートを含めると、ビューでレンダリングの問題が発生します。

erb ファイルに「非 erb」セクションを含める方法はありますか? これにより、erb ファイル内で ejs テンプレートを定義できます。現在、ejs テンプレートを含むファイルの生の内容を読み取り、それを生の文字列として erb テンプレートに出力するヘルパーがあるハックを使用しています。

4

3 に答える 3

3

このトリックを使用して問題を解決します。

// 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 テンプレートに対してです。

于 2011-04-11T13:01:22.820 に答える
2

ejs を別のファイルとして保存し、それを script タグ内のテキスト (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)
于 2012-02-01T17:18:35.153 に答える