Частичный шаблон Rails с использованием пользовательского обработчика экранирует HTML - PullRequest
5 голосов
/ 30 сентября 2011

Я работаю над приложением 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 в моем шаблоне отображается на странице следующим образом:

&lt;div%gt;

Я уверен, что я упускаю что-то очевидное здесь, но я не знаю, что это могло быть ... Как я могу заставить этот обработчик шаблона просто включать мой основанный на ejs шаблон, не экранируя весь html в нем

Edit:

Я обнаружил, что вызов метода render с помощью html_safe работает:

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

Это похоже на клудж - хотя должен быть способ заставить erb рендеринг трактовать текст из моего обработчика как html безопасный текст.

1 Ответ

0 голосов
/ 12 октября 2011

Может быть, вы должны использовать сырье. Проверьте это

def compile(template)
  raw template.source.inspect
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...