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