Встраивание шаблона ejs в шаблон erb - PullRequest
5 голосов
/ 17 января 2011

Я создаю приложение javascript-rails 3. Он использует underscore.js, который имеет очень элегантный шаблонизатор, построенный поверх ejs (http://embeddedjs.com/).

Проблема: внедренные заимствования в значительной степени заимствованы из синтаксиса erb, поэтому включение шаблонов ejs в шаблон erb вызывает проблемы с отображением в представлении.

Есть ли способ включить "не-erb" разделы в файл erb? Это позволило бы мне определить шаблоны ejs внутри erb-файлов. Прямо сейчас я использую хак, где у меня есть помощник, который читает сырое содержимое файла, содержащего шаблоны ejs, и выводит его в виде необработанной строки в шаблоне erb.

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

Я использую этот трюк для решения проблемы:

// 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.

2 голосов
/ 05 февраля 2015

Избегайте ваших переменных Underscore: (Те, которые вы не хотите, чтобы erb интерполировал)

<%= foo %> becomes:

<%%= foo %>
2 голосов
/ 01 февраля 2012

Вы можете сохранить ejs как отдельный файл и затем отобразить его как текст (который не будет оцениваться как erb) внутри тега script.

Внутри вашей части 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)
...