我对Ruby on Rails和Leaflet都不熟悉,但是我正在尝试使用'leaflet-rails'版本1.6和Rails版本6.0.3.2来实现地图。
这里有一个类似的帖子,讨论了类似的问题。
当我加载页面时,出现'ReferenceError: L未定义'。我已经按照安装指南操作并尝试了整整两个晚上,但没有成功。唯一能让地图工作的方法是将下面的代码添加到我要实现地图的HTML文件中。
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.6.0/dist/leaflet.css"/>
<script src="https://unpkg.com/leaflet@1.6.0/dist/leaflet.js"/>
我已经检查过了,我正在使用leaflet-rails 1.6.0
我已经在Gemfile中添加了'gem 'leaflet-rails''
我已经在application.css文件中添加了'*= require leaflet'
我已经在application.js文件中添加了'//= require leaflet'
我已经在application.html.erb中添加了下面的代码
<%= javascript_pack_tag 'application', 'data-turbolinks-track': true %>
<%= stylesheet_link_tag 'application' %>
我已经将下面的代码添加到我创建的leaflet.rb文件中。
' Leaflet.tile_layer = 'http://{s}.tile.cloudmade.com/YOUR-CLOUDMADE-API-KEY/997/256/{z}/{x}/{y}.png'
# You can also use any other tile layer here if you don't want to use Cloudmade - see http://leafletjs.com/reference.html#tilelayer for more
Leaflet.attribution = 'Your attribution statement'
Leaflet.max_zoom = 18'
当我刷新页面并检查HTML时,脚本正在运行以下代码。
var map = L.map('map', {});
map.setView([51.52238797921441, -0.08366235665359283], 18);
L.tileLayer('http://{s}.tile.cloudmade.com/YOUR-CLOUDMADE-API-KEY/997/256/{z}/{x}/{y}.png', {
attribution: 'Your attribution statement',
maxZoom: 18,
}).addTo(map);
如果我查看文件头部,它似乎引用了application.js文件,但是我没有看到它引用任何与Leaflet相关的内容。
<script src="/packs/js/application-9fe6f817df469889a178.js" data-turbolinks-track="true"></script>
我对Rails非常陌生,不知道下一步该尝试什么。
非常感谢任何帮助。谢谢,Rory。
yarn add leaflet
添加依赖项。在 Rails 6 中,作为 gem 分发的前端包是一个过时的概念,并且通常存在问题,因为它们总是落后于封装的包。 - max//= require leaflet
这个注释是用于旧的资产管道的 Sprockets 指令,在 Webpack 中不会起作用。在 Webpack 中,你需要在主清单文件(或导入语句)中使用require('leaflet')
函数来引入 Leaflet 库。这是完全不同的方式,你正在遵循过时的指示。请参考 https://github.com/rails/webpacker。 - max