Rails - вызов функции JS в app / javascript из js.erb в app / views - PullRequest
0 голосов
/ 19 сентября 2018

Начинающий с 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, если это возможно.

...