Начинающий с Rails (v5.2.1), я пытаюсь включить некоторый JavaScript.
У меня есть функция extendCard
в app / javascript / packs , которая помещает прослушиватель событий ввсе мои элементы с классом "карта".Я экспортировал эту функцию и импортировал ее в app / javascript / packs / application.js .Эта функция работает, когда я вызываю ее из application.js .
Чтобы упростить задачу, скажем, эта функция:
function extendCard() {
let cards = document.querySelectorAll(".card");
for(let i = 0; i < cards.length; i++) {
cards[i].addEventListener("click", function() {
console.log("click works");
});
}
}
export { extendCard };
И в приложении .js :
import { extendCard } from './extend';
extendCard();
В views / layouts / application.html.erb Я поставил:
<%= javascript_include_tag 'application' %>
<%= javascript_pack_tag 'application' %>
Иногда мне нужно обновитькарты отображаются, но хотят сделать это с помощью ajax.Я поместил remote: true
на кнопку, которая обновляет отображаемые карты (с фильтрами), и отображаю новые карты с помощью файла js.erb , хранящегося в app / views / cards .Обновление работает нормально.
Теперь мне нужно снова добавить прослушиватель событий на эти новые карты.Я хотел бы вызвать свою функцию extendCard
, но я не знаю, как ее достичь.Когда я его вызываю, я получаю:
Uncaught ReferenceError: extendCard не определена
Единственное, что я могу сделать, это переписать свою функцию внутри js.erb (но на самом деле их у меня много), и он не очень СУХОЙ.
Обратите внимание, что у меня есть gem .Я не очень понимаю, но думаю, что это связано.
Итак, мой вопрос: как мне легко получить доступ к функциям, импортированным в app / javascript / packs / application.js ?Я хотел бы сделать это в Vanilla JS, если это возможно.