如果我有點困惑,請原諒我,我冒險進入編程的新領域,並隨時學習。我正在努力的基本概念:Rails 4,turbolinks和coffeescript
在我的Rails 4應用程序中,我使用了Leaflet(一個用於映射的JS庫)並調用了一些我自己的代碼。長話短說,我無法獲得傳單和Turbolinks一起打好,因此我的網站上的頁面需要傳單我已禁用Turbolinks,另外我正在加載頁面特定的Coffeescript。
我現在已經決定要添加一個後退按鈕。用法將如下圖所示 - 從使用Leaflet的頁面中,用戶可以點擊地圖的一部分並將其帶到使用Turbolinks的頁面(如果有的話)。從Turbolinks頁面,我有一個後退按鈕可以將您帶回到Leaflet地圖。
但是,當我回到Leaflet頁面時,我的coffeescript要麼沒有運行,要麼正在錯誤的時間運行(我得到了幾次運行不到的錯誤)。我猜我需要在Coffeescript的開頭添加另一個事件,或者選擇一個不同的事件,但我不確定它應該是什麼。
如果您有關於如何使其工作的建議,並且它有助於獲得後退按鈕的工作,我絕不會在傳單頁面上不使用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
- 全CoffeeScript的代碼
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()
這些都是非常有幫助的意見。 :)我檢查了我的代碼,事實證明我正在使用TurboLink 5.所以有更好的方法嗎?另外,我添加了完整的coffeescript代碼,因爲我不確定是否知道如何更改圖層。這裏有一個[鏈接](http://leafletjs.com/reference-1.0.2.html#layer)給Leaflet文檔的圖層(以防他們的幫助)。 – Ben