Verzeihen Sie mir, wenn ich ein bisschen verwirrt bin, wage ich mich in meinem Programm in neue terratory und lerne, wie ich gehe. Das grundlegende Konzept, mit dem ich kämpfe:Schienen 4, Turbolinks und Kaffeeskript
In meiner Rails 4 app verwende ich Leaflet (eine JS-Bibliothek für die Zuordnung) und einige meiner eigenen Code aufrufen. Lange Rede, kurzer Sinn: Ich konnte Leaflet und Turbolinks nicht gut zusammen spielen, also lade ich für die Seiten meiner Seite, auf denen ich Leaflet, Turbolinks deaktiviert habe, Seite-spezifische Coffeescript.
Ich habe jetzt entschieden, dass ich einen Zurück-Button hinzufügen möchte. Die Verwendung würde folgendermaßen aussehen: Auf einer Seite, die Leaflet verwendet, kann der Benutzer auf ein Stück der Karte klicken und auf eine Seite mit Turbolinks (falls es darauf ankommt) zugreifen. Von der Turbolinks-Seite aus habe ich eine Zurück-Schaltfläche, mit der Sie zurück zur Leaflet-Map gelangen.
Wenn ich jedoch zurück zur Leaflet-Seite komme, wird mein coffeescript entweder nicht ausgeführt oder wird zur falschen Zeit ausgeführt (ich bekomme mehrere Fehler, die beim ersten Mal nicht vorhanden waren). Ich vermute, dass ich zu Beginn des Coffeescript ein weiteres Event hinzufügen oder ein anderes Event wählen müsste, aber ich bin mir nicht sicher, was es sein soll.
Ich bin in keiner Weise daran gebunden, Turbolinks nicht auf der Leaflet-Seite zu verwenden, wenn Sie einen Vorschlag haben, wie es funktioniert und es hilft, den Zurück-Button zum Laufen zu bringen. :)
_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
aktualisieren
grid.coffee
- in voller Coffeescript-Code
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()
das sind beide sehr hilfreiche Kommentare. :) Ich habe meinen Code überprüft und es stellt sich heraus, dass ich TurboLinks 5 verwende. Gibt es einen besseren Weg? Außerdem habe ich meinen vollständigen coffeescript-Code hinzugefügt, weil ich nicht sicher bin, wie ich die Layer-Sache ändern kann. Hier ist ein [link] (http://leafletjs.com/reference-1.0.2.html#layer) zu Leaflet-Dokumenten für die Ebene (falls sie helfen). – Ben