Использовать jQuery для добавления инструкции yield в тело application.html.erb?

#jquery #ruby-on-rails

#jquery #ruby-on-rails

Вопрос:

Я работаю над приложением rails и хотел бы более тщательно скрыть некоторый код. На данный момент в моем application.html.erb есть только инструкция <%= yield%>, и я хотел бы перенести это создание в jQuery. Я попытался поместить это в свой application.js:

 jQuery(function($) {
  $('<div id="wrapper"><%= escape_javascript(yield) %></div>').appendTo('body');
});
  

Но это не работает, я предполагаю, что это связано с тем, что это не erb-файл, поэтому он не анализирует какой-либо ruby. Есть ли какой-либо способ получить такого рода функциональность при загрузке?

Приветствия, Стив

Ответ №1:

Ну, я разобрался с этим. Спасибо за ответы, но я хотел бы уточнить: на самом деле вы можете использовать ERB из клиентского js, я регулярно использую его с методом render (). Например.

 $('#myDiv').html("<%= escape_javascript(render( :partial => 'profile' )) %>");
  

Это прекрасно работает. Моей целью было замаскировать html, отображаемый файлом ERB, из стандартного исходного кода, который можно щелкнуть правой кнопкой мыши> просмотреть. Я знаю, что они все еще могут использовать инспектор DOM, чтобы увидеть все это. Я реализовал это, используя стандартный application.html.erb с инструкцией <%= yield %> , однако я изменил свой метод next action (show) для обратной визуализации javascript, я создал свой show.js.erb с помощью jQuery, где я затем динамически добавляю остальную часть моей страницы к тегу body, используя partial.

Ответ №2:

<%= yield %> Материал обрабатывается на стороне сервера до отправки результата в браузер, вы не можете создать ERB из своего клиентского JS и ожидать, что он сработает.

Вашей единственной альтернативой для такого рода взаимодействия (не то чтобы я это рекомендовал) было бы onload вызвать AJAX-метод на сервере, который отправляет некоторую часть документа, которую ваш JS затем мог бы отобразить в браузере.

Ответ №3:

Где вы используете свой javascript-код? вы используете внешний файл? инструкция yield работает только при использовании кода на той же странице, она не работает во внешнем файле

Ответ №4:

Из того, что вы сказали, кажется, что вы пишете js-код в application.js . Это не сработает. Вам нужно записать его в тот же файл, что и HTML, где присутствует yield.

Попробуйте написать свой код в layout.