В Rails 5 куда мне положить мой javascript_include_tag? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть следующий тег в файле application.html.erb: <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

Изначально он находится в разделе head, что по умолчанию для Rails 5.2, я полагаю.Проблема была в том, что он не загружал JS-файлы в мою папку assets / javascripts.Мне посоветовали переместить тег куда-нибудь после части <%= yield %>, но по-прежнему внутри body.Это работало нормально, и JS из этой папки загрузился нормально.Проблема сейчас в том, что я использую камень leaflet-rails, и карта не будет загружаться, когда javascript_include_tag находится в body ... Могу ли я что-нибудь сделать, чтобы обе эти вещи работали?

Мои активы / javascripts / location.js

var currentLocation = document.getElementById('coordinatesStore'); 
document.querySelector('.add-button').addEventListener('click', () => {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(({ coords: { latitude, longitude }}) => {
    currentLocation.value = latitude + ", " + longitude;
    });
  } else {
    currentLocation.value = "Geolocation is not supported by this browser.";
  }
});

1 Ответ

2 голосов
/ 17 мая 2019

Проблема в том, что вы пытаетесь присоединить обработчики событий к элементам, которые еще не существуют.Решение стандартное: загрузить код в голове, но отложить выполнение до загрузки страницы.

// wrap your code in a function, so that it can be executed later
function attachLocationClickHandlers() {
  Array.prototype.forEach.call(
    document.querySelectorAll('.add-button'),
    (button, i) => {
      // do something on click
    }
  );
}

document.addEventListener("turbolinks:load", function() {
  attachLocationClickHandlers()
})

( или что-то в этом роде. Я не знаю javascript )

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