【发布时间】:2015-02-04 00:13:31
【问题描述】:
使用 RoR 4.1.4
我正在尝试使用leaflet-rails gem。我按照 github 页面中列出的步骤进行操作,但是当我尝试加载地图时,我看到了
ReferenceError: L is not defined
在浏览器控制台中。这显然意味着 gem 中的帮助程序正在加载和执行,但它找不到 leaflet.js 文件。
但是,页面的 head 部分显示 /assets/leaflet.js 正在被引用并且它实际上就在那里。
当我查看生成的代码时:
<div id="map"></div>
<script>
var map = L.map('map')
map.setView([-54.0, 6.08], 16)
L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 18,
subdomains: '',
}).addTo(map)
</script>
</div>
<script src="/assets/jquery.js?body=1" data-turbolinks-track="true"></script>
<!-- all the other scripts loaded -->
<script src="/assets/exif.js?body=1" data-turbolinks-track="true"></script>
<script src="/assets/leaflet.js?body=1" data-turbolinks-track="true"></script>
<!-- some more scripts -->
因此,gem 在地图 div 的正下方添加了一个脚本,然后,由于 sprockets 机制和所有其他原因,才会加载其他脚本。对我来说,这看起来很明显脚本不可能加载leaflet.js,因为它被之后引用!
那么...我是否误解了 RoR 如何处理 gems 和 javascripts?它一定在某个时候起作用了……
这是我的 /app/assets/javascript/application.js:
//= require jquery
//= require jquery.ui.widget
// Here I load a whole bunch of javascripts which are related to jquery-fileupload, cut for brevity
//= require bootstrap.min
//= require bootbox.min
//= require bootstrap-datepicker
//= require exif
//= require leaflet
//= require turbolinks
//= require_tree .
【问题讨论】:
标签: javascript ruby-on-rails gem leaflet sprockets