轨道上的红宝石:小叶轨道没有装载

问题描述 投票:0回答:3

使用RoR 4.1.4

我正在尝试使用leaflet-rails gem。我按照github页面中列出的步骤进行操作,但是当我尝试加载地图时,我看到了

ReferenceError: L is not defined

在浏览器控制台中。这显然意味着正在加载和执行gem中的帮助程序,但它无法找到leaflet.js文件。

但是,页面的头部显示/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: '&copy; <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在map div下面添加了一个脚本,然后,由于sprockets机制和所有这些,所以加载了其他脚本。对我来说,这看起来很明显,脚本不能加载leaflet.js,因为它后来被引用!

所以......我误解了RoR如何处理宝石和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
3个回答
0
投票

事实证明这可能是一些特定于RoR的问题。

许多网站建议把

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

在文件的END处加载javascripts的行,以加快页面显示。使用leaflet-rails宝石,这不是很好,并将产生上述问题。如果在<head>部分放置相同的行,问题就会消失......

附:我仍然有宝石的问题,现在我得到了

Error: No value provided for variable {s}

如果我用“http://{s}.tile.osm.org/{z}/{x}/{y}.png”代替“http://a.tile.osm.org/{z}/{x}/{y}.png"”它的确有效......不要认为它的意思是那样工作......但这是一个不同的问题......


0
投票

我在rails中遇到了同样的问题。

  • 传单在开发模式下工作(凉亭管理)
  • Can't find variable L处于生产模式

以下步骤没有帮助。

  • asset "leaflet"(Bowerfile)
  • //= require leaflet/dist/leaflet.js(application.js)
  • *= require leaflet/dist/leaflet.css(application.css)
  • Rails.application.config.assets.precompile += ['leaflet/dist/leaflet.js', 'leaflet/dist/leaflet.css']
  • 资产预编译并上传到生产public/assets/...

我还缺少什么吗?

[解]

可以使用http://leafletjs.com/examples/quick-start/上的传单推荐的CDN资产来解决此问题

但是,我更愿意使用捆绑在我的应用服务器上的本地缓存预编译资产,而不是依赖公共CDN,网络带宽和更多外部事物。


0
投票

不知道你是否能够解决你的问题。对我来说,我忘了跑:

rake assets:precompile

在部署到生产之前。

© www.soinside.com 2019 - 2024. All rights reserved.