Я использую 5.2 с webpacker. Это простое ресторанное приложение с отзывами.
Обзоры имеют содержание столбца и рейтинг.
В моем app/javascript/plugins
я запускаю небольшой скрипт, который создает рейтинг в форме звезды, который делает ввод для рейтинга похожим на звезды (https://github.com/antennaio/jquery-bar-rating), который работает нормально.
Однако, я отображаю отзывы и форму обзора на странице показа ресторанов и при отправке делаю запрос AJAX, который отображает следующие js - в основном, он добавляет новый отзыв в список отзывов для этого ресторана, а затем я обновляю вся форма, чтобы избавиться от ввода. Если обзор не сохраняется, я просто обновляю форму.
function refreshForm(innerHTML) {
const newReviewForm = document.getElementById('new_review');
newReviewForm.innerHTML = innerHTML;
}
function addReview(reviewHTML) {
const reviews = document.getElementById('reviews');
reviews.insertAdjacentHTML('beforeend', reviewHTML);
}
<% if @review.errors.any? %>
refreshForm('<%# j render "reviews/form", restaurant: @restaurant, review: @review %>');
<% else %>
addReview('<%= j render "reviews/show", review: @review %>');
refreshForm('<%= j render "reviews/form", restaurant: @restaurant, review: Review.new %>');
<% end %>
Этот AJAX-запрос также работает по назначению, но когда обновляется простая форма, вход для рейтинга - это просто нормальный выпадающий список, а не звезды из плагина. Как я могу вызвать скрипт из app/javascript/plugin/init_star.js
внутри моего AJAX js, который находится внутри папки просмотра?
Я также пытался поместить звездный скрипт в пакет и вызывать <%= javascript_pack_tag> %
только в ресторанах / шоу или даже при частичном рендеринге формы (и ее обновлении). Мне нужно снова вызвать функцию звезды, и я не знаю, как получить к ней доступ.