Подтвердить что ты не робот

Оказание частичного в файле js.erb

Я пытаюсь создать форму комментария на основе ajax, которая будет обновлять список комментариев при отправке. Довольно простой материал.

У меня есть частичный comments/_single.html.haml, у которого есть один тег <li> с базовыми комментариями, и вот мой comments/create.js.erb файл (на самом деле это три разных тестовых файла, объединенных в один, чтобы показать вам, что моя проблема):

$('#comments ul.comments').append("<%= render :partial => 'comments/single', :locals => { :c => @comment } %>");
$('#comments ul.comments').append("<%= render :partial => 'comments/foobar' %>");
$('#comments ul.comments').append("foobar");
alert('foobar');

Содержимое для comments/_foobar.html.haml - это просто foobar, не внутри html. Моя проблема в том, что первые две строки не работают. В моей консоли сервера Dev отсутствуют ошибки, инспектор объектов говорит, что код комментария был возвращен правильно, но они не добавлены в мой список комментариев. Третья строка работает отлично, и поэтому четвертая. Похоже, есть некоторые проблемы с использованием render.

4b9b3361

Ответ 1

При рендеринге части кода Javascript вы должны использовать метод escape_javascript, например

$('#comments ul.comments').append("<%= escape_javascript render(:partial => 'comments/single', :locals => { :c => @comment }) %>");

Этот метод сглажен как j, поэтому вы также можете сделать это

$('#comments ul.comments').append("<%= j render(:partial => 'comments/foobar') %>");

Метод Сбрасывает возврат каретки и одинарные и двойные кавычки для сегментов JavaScript ActionView:: Helpers:: JavaScriptHelper Rails docs