При динамическом добавлении элементов на страницу вам также придется инициализировать редактор Summernote для этих элементов.У Cocoon есть обратные вызовы, чтобы вы могли это сделать.
При загрузке страницы, чтобы инициализировать summernote, вы должны сделать что-то вроде
$('[data-provider="summernote"]').each ->
$(this).summernote
(скопировано из документации по самоцвету summernote-rails)
Но это работает только для"summernote" уже на странице, он не может инициализировать заметок, которых еще нет.
Итак, после вставки вложенных элементов мы должны использовать тот же код для инициализации вставленных заметок.Что-то вроде этого должно работать:
$('form').on('cocoon:after-insert', function(e, insertedItem) {
insertedItem.find('[data-provider="summernote"]').each(function() {
$(this).summernote();
})
});
Это будет искать элементы Summernote в только что вложенном элементе и инициализировать их.
[РЕДАКТИРОВАТЬ: улучшить JavaScript, чтобы извлечь его из вида]
Файлы Javascript обычно группируются в app/assets/javascripts
, если вы редактируете Dog
с, давайте добавим новый файл dogs.js
ивведите следующий код:
$(document).on('cocoon:after-insert', 'form', function(e, insertedItem) {
insertedItem.find('[data-provider="summernote"]').each(function() {
$(this).summernote();
})
});
Затем добавьте этот файл в application.js
, используя require dogs
.
Этот код регистрирует обработчик событий в документе, он будет прослушивать любое событие cocoon:after-insert
, запущенное на form
.Если у вас есть несколько форм, использующих cocoon, вам может потребоваться более точный или более точный селектор CSS (например, добавить класс в форму и добавить его тоже).