Прослушиватель событий Javascript, не выполняемый в приложении Rails

#javascript #html #css #ruby-on-rails #tailwind-css

Вопрос:

После того, как я прочесал Интернет и переписал столько объяснений, сколько смог, я просто не получаю ожидаемого результата. Ожидаемый результат-когда Пользователь выбирает «Все встречи», он переключается с представления календаря на представление списка.

Я вижу, что в Календаре вызывается правильный маршрут (http://localhost:5000/appointments#calendar) и Все встречи (http://localhost:5000/appointments#all-appointments). Но вид из календаря не меняется.

Я пробовал различные способы вызова из файла application.html.erb и различных структур. Возможно, это что-то простое, но я не просто вижу это.

Структура папок:

https://i.stack.imgur.com/WPNWH.png

Ниже приведены соответствующие фрагменты, любая помощь будет признательна!

application.html.erb

 lt;!DOCTYPE htmlgt; lt;html class="h-100"gt;  lt;headgt;  lt;%= render 'shared/head' %gt;  lt;%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %gt;  lt;%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %gt;  lt;%= javascript_include_tag "https://js.stripe.com/v3/", 'data-turbolinks-track': 'reload' %gt;  lt;%#= tag :meta, name: "stripe-public-key", content: Rails.application.credentials.stripe_publishable_key %gt;  lt;/headgt;   lt;body class="d-flex flex-column h-100"gt;  lt;main class="flex-shrink-0"gt;   lt;%= render 'shared/navbar' %gt;  lt;%= render 'shared/notices' %gt;   lt;div class="container mt-4 mx-auto"gt;  lt;%= yield %gt;  lt;/divgt;  lt;/maingt;   lt;%= render 'shared/footer' %gt;  lt;/bodygt; lt;/htmlgt; 

_appointments_landing.html.erb

 lt;nav class="bg-white mb-4 shadow rounded"gt;  lt;ul id="nav-tab" class="tabs list-reset flex"gt;   lt;li class="active" data-tab="calendar"gt;  lt;%= link_to "#calendar", class: "tab flex items-center" do %gt;  lt;svg viewBox="0 0 20 20" width="16" height="16" class="fill-current text-grey-light mr-2"gt;lt;titlegt;calendarlt;/titlegt;lt;path d="M1 4c0-1.1.9-2 2-2h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V4zm2 2v12h14V6H3zm2-6h2v2H5V0zm8 0h2v2h-2V0zM5 9h2v2H5V9zm0 4h2v2H5v-2zm4-4h2v2H9V9zm0 4h2v2H9v-2zm4-4h2v2h-2V9zm0 4h2v2h-2v-2z"gt;lt;/pathgt;lt;/svggt;  Calendar  lt;% end %gt;  lt;/ligt;   lt;li data-tab="all-appointments"gt;  lt;%= link_to "#all-appointments", class: "tab flex items-center" do %gt;  lt;svg viewBox="0 0 20 20" class="fill-current text-grey-light mr-2" width="16" height="16"gt;lt;titlegt;coffeelt;/titlegt;lt;path d="M4 11H2a2 2 0 0 1-2-2V5c0-1.1.9-2 2-2h2V1h14v10a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4zm0-2V5H2v4h2zm-2 8v-1h18v1l-4 2H6l-4-2z"gt;lt;/pathgt;lt;/svggt;  All Appointments  lt;% end %gt;  lt;/ligt;   lt;/ulgt; lt;/navgt; lt;div class="bg-white p-10 border rounded"gt;  lt;div id="all-appointments" class="tab-panel"gt;   lt;h1gt;Appointmentslt;/h1gt;   lt;% appointments.each do |appointment| %gt;  lt;div class="flex flex-wrap items-center justify-start p-4 border-b border-grey-light mb-6"gt;  lt;div class="flex-1 flex justify-between"gt;  lt;divgt;  lt;%= link_to appointment.title, appointment, class: "link mr-4" %gt;  lt;/divgt;  lt;divgt;  lt;%= readable_time(appointment.start_time) %gt; amp;ndash;  lt;%= readable_time(appointment.end_time) %gt;  lt;/divgt;  lt;/divgt;  lt;/divgt;   lt;%= link_to "Cancel Appointment", appointment, method: :delete, data: { confirm: "Are you sure? There are no refunds." }, class: "btn btn-destroy ml-4" if admin? %gt;  lt;% end %gt;  lt;/divgt;   lt;div id="calendar" class="tab-panel active"gt;  lt;h2gt;Appointment Calendarlt;/h2gt;  lt;div id="appointment-calendar"gt;  lt;%= render "calendar", appointments: appointments %gt;  lt;/divgt;  lt;/divgt; lt;/divgt; 

application.js

 window.Rails = require("@rails/ujs") require("@hotwired/turbo-rails") require("@rails/activestorage").start() require("channels") //require("trix") //require("@rails/actiontext") require("local-time").start() require("packs/appointments") // TailwindCSS import 'stylesheets/application'  // Start Rails UJS Rails.start()  // Stimulus import "controllers"  document.addEventListener("turbo:load", () =gt; {  var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))  var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {  return new bootstrap.Tooltip(tooltipTriggerEl)  })   var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))  var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {  return new bootstrap.Popover(popoverTriggerEl)  }) }) 

appointments.js

 document.addEventListener("turbolinks:load", () =gt; {  const tabElements = document.querySelectorAll('#nav-tab .tab');   function onTabClick(event) {  const activeTabs = document.querySelectorAll('.active');   activeTabs.forEach(function(tab) {  tab.classList.toggle('active');  });    event.target.parentElement.classList.add('active');   event.preventDefault();   // show and hide tab panels  var tabPanel = document.getElementById(event.target.href.split("#")[1]);  tabPanel.classList.toggle('active');  }    if(tabElements != null) {  tabElements.forEach(function(tab) {  tab.addEventListener('click', (event) =gt; {  onTabClick(event);  });  });  } });