【发布时间】:2016-12-20 14:04:12
【问题描述】:
如果我有点困惑,请原谅我,我正在冒险进入我编程的新领域,并且边走边学。我正在努力解决的基本概念:
在我的 Rails 4 应用程序中,我使用 Leaflet(一个用于映射的 JS 库)并调用我自己的一些代码。长话短说,我无法让 Leaflet 和 Turbolinks 一起很好地发挥作用,所以对于我网站中需要 Leaflet 的页面,我禁用了 Turbolinks,另外我正在加载页面特定的 Coffeescript。
我现在决定要添加一个后退按钮。用法是这样的——从使用 Leaflet 的页面,用户可以单击地图的一部分并被带到使用 Turbolinks 的页面(如果重要的话)。在 Turbolinks 页面中,我有一个返回按钮,可将您带回 Leaflet 地图。
但是,当我返回 Leaflet 页面时,我的咖啡脚本要么没有运行,要么运行时间错误(我遇到了几个第一次运行时不存在的错误)。我猜我需要在 Coffeescript 的开头添加另一个事件或选择一个不同的事件,但我不确定它应该是什么。
如果您有关于如何使其工作的建议并且有助于使后退按钮正常工作,我绝不会拒绝在 Leaflet 页面上使用 Turbolinks。 :)
_navbar.html.erb
<li><%= link_to("By grid", grid_path, data: {turbolinks: false}) %></li>
grid.html.erb
... code for layout goes here ...
<% content_for :header do %>
<%= javascript_include_tag "leaflet" %>
<% end %>
<% content_for :javascript do %>
<%= javascript_include_tag "leaflet-maps/#{filename}" %>
<% end %>
leaflet-maps/grid.coffee
$ ->
document.addEventListener 'page:restore', ->
app.init()
return
... rest of coffeescript goes here ...
... here is how the link is getting called
layer.on 'click', (e) ->
window.location.href='/show?grid='+feature.id
return
show.html.erb
<%= link_to "Back", :back %>
更新
grid.coffee - 完整的咖啡脚本代码
ready = ->
#--------------------------------------------------
# Build tooltip with plant name
#--------------------------------------------------
onEachFeature = (feature, layer) ->
if feature.properties and feature.properties.grid_name
layer.bindTooltip feature.properties.grid_name
layer.on 'click', (e) ->
window.location.href='/show?grid='+feature.id
return
return
#--------------------------------------------------
# Variables
#--------------------------------------------------
L.Icon.Default.imagePath = '/assets'
gridStyle = {
"color": "#ff7800",
}
neCorner = L.latLng([47.635103, -122.320525])
swCorner = L.latLng([47.634083, -122.321129])
#--------------------------------------------------
# Set view and load Google Maps
#--------------------------------------------------
map = L.map("map", zoomSnap: .25)
map.fitBounds([swCorner, neCorner])
map.invalidateSize(false)
map.options.maxZoom = 22
map.options.bounceAtZoomLimits = true
googleLayer = L.gridLayer.googleMutant(type: 'roadmap').addTo(map)
map.addLayer googleLayer
#--------------------------------------------------
# Get Ajax data
#--------------------------------------------------
$.ajax
dataType: 'text'
url: 'grid.json'
success: (data) ->
L.geoJSON(JSON.parse(data), style: gridStyle, onEachFeature: onEachFeature ).addTo map
error: ->
alert "Failed to load AJAX data"
document.addEventListener 'turbolinks:load', ready()
document.addEventListener 'DOMContentLoaded', ready()
【问题讨论】:
标签: javascript ruby-on-rails-4 coffeescript leaflet turbolinks