Оказание частичного в файле 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
.
Ответы
Ответ 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