Частичное рендеринг в файле 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 внутри. Моя проблема в том, что первые две строки не работают. В моей консоли сервера разработки ошибок нет, инспектор объектов говорит, что код комментария был возвращен правильно, но они не добавлены в мой список комментариев. Третья строка работает нормально, и поэтому четвертая. Похоже, есть некоторые проблемы с использованием 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') %>");
Метод Escapes возврат каретки и одинарные и двойные кавычки для сегментов JavaScript ActionView::Helpers::JavaScriptHelper Rails docs