Я работаю над приложением Rails 3.1, использующим шаблоны JavascriptMVC и ejs в клиенте для выполнения некоторых сложных функций в моем приложении. К сожалению, синтаксис ejs очень похож на синтаксис erb, до такой степени, что я не могу хранить код в одном и том же файле (хотя, если кто-то знает хороший способ сделать это, я был бы в восторге). В конечном счете, я хочу иметь возможность применять некоторый код rails в шаблоне ejs (скажем, для I18n), но сейчас я просто согласен, чтобы это сработало
Следуя примеру этого вопроса Я создал собственный обработчик шаблонов, который выглядит следующим образом:
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 в моем шаблоне отображается на странице следующим образом:
<div%gt;
Я уверен, что я упускаю что-то очевидное здесь, но я не знаю, что это могло быть ... Как я могу заставить этот обработчик шаблона просто включать мой основанный на ejs шаблон, не экранируя весь html в нем
Edit:
Я обнаружил, что вызов метода render с помощью html_safe работает:
<%= render('path/to/my/ejs/templates/jmvc_templates').html_safe %>
Это похоже на клудж - хотя должен быть способ заставить erb рендеринг трактовать текст из моего обработчика как html безопасный текст.