Я использую эту библиотеку js (bootstrap-stars-rating) для предоставления оценок по звездам с использованием jquery в моем приложении на Rails 5
Это работает хорошо, за исключением того, что если я вызываю его изнутрипартиал, который визуализируется помощником Ajax, он не инициализирует код javascript, необходимый для визуализации звезд
Я попытался решить эту проблему, сделав глобально доступную функцию в моем файле инициализации webpacker для этой библиотеки, например так:
import "bootstrap-star-rating";
import "bootstrap-star-rating/css/star-rating.css";
import "bootstrap-star-rating/js/star-rating.js";
import "bootstrap-star-rating/themes/krajee-fas/theme.min.css";
const rating_options = {
size: 'xs',
showCaption: false,
step: 0.5,
filledStar: '<i class="fas fa-star"></i>',
emptyStar: '<i class="far fa-star"></i>',
theme: 'krajee-fas',
hoverOnClear: false
}
// initialize the star rating across the application
const initStarRating = () => {
document.addEventListener("turbolinks:load", () => {
console.log('hey I was run');
$(".bootstrap-rating").rating(rating_options);
}, {passive: true});
}
// initialize specific star rating in a specific form for ajax
const initStarRatingForObj = (obj) => {
{
console.log(obj)
console.log(obj.find(".bootstrap-rating"))
obj.find(".bootstrap-rating").rating(rating_options);
}
}
// binding the function so I can access it globally
window.initStarRatingForObj = initStarRatingForObj
export { initStarRating }
Проблема в том, что если я вызову эту функцию выше в файле js.erb, который визуализирует частичное, передавая правильный объект в функцию initStarRatingForObj
, он сломается и выдаст ошибку, он не может найти функцию rating()
((которая вызывается в initStarRating))
Это очень странно, поскольку функция rating()
уже доступна и работаетв этом файле, так как это работает в initStarRating()
, но не в initStarRatingForObj()
?
Я искал это часами, но это не работает, я надеюсь, кто-то может указать, чтопроблема.
Примечание: тот же фрагмент работает хорошо на той же странице , если он не отображается ответом Ajax