Частичное рендеринг в файле 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

Другие вопросы по тегам