JavaScript-код Rails 5 для управляемой части Ajax работает странно и не может инициализировать входные данные начальной загрузки начальной загрузки, как следует - PullRequest
1 голос
/ 25 сентября 2019

Я использую эту библиотеку 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...