首页 > 解决方案 > 在 Rails 5 中,我应该将 javascript_include_tag 放在哪里?

问题描述

我的 application.html.erb 文件中有以下标签:<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

最初它位于该head部分中,这是我假设的 Rails 5.2 的默认设置。问题在于它不会在我的 assets/javascripts 文件夹中加载 JS 文件。有人建议我将标签移动到<%= yield %>零件之后但仍在body. 这工作正常,该文件夹中的 JS 加载正常。现在的问题是我正在使用gem 并且地图在其中leaflet-rails时不会加载......我能做些什么来让这两个东西都起作用吗?javascript_include_tagbody

我的资产/javascripts/locations.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.";
  }
});

标签: ruby-on-railsruby-on-rails-5

解决方案


这里的问题是您试图将事件处理程序附加到尚不存在的元素。解决方案是标准的:在头部加载代码,但推迟运行它直到页面加载。

// 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


推荐阅读