JavaScript と変数の受け渡し方法を理解しようとしていますが、うまくいきません。Google マップのマーカーを ajax で更新しようとしていますが、何も起こりません。
いくつかの変数をコントローラーに送信するフォームを送信します。いくつかのものは処理され、.js で応答します...
find.js.erb
$('#collapseTwo ul').html("<%= j render partial: 'events/sidebar', collection: @events %>");
alert(<%= raw @hash.to_json %>);
clearMarkers();
markers = handler.addMarkers(<%= raw @hash.to_json %>, {
draggable: false
});
レンダリングは正常に実行されるため、すべてがそこで機能していますが、マップを更新するためのマーカーを取得できないようです。そのアラートは を示し[object Object]
ているので、おそらく正しいのですが、マーカーに対するアクションはありません。
marker.coffee
の形でいくつかの変更を加えました
clear: ->
@getServiceObject().setMap(null)
show: ->
@getServiceObject().setVisible(true)
hide: ->
@getServiceObject().setVisible(false)
それでclearMarkers();
うまくいきます。それは別のファイルにあり、他のアクションを保存しています
events.js.コーヒー
jQuery ->
...
...
@clearMarkers = ->
for marker in Gmaps.store.markers
marker.clear()
Gmaps.store.markers = []
だから...私は最初にマップを呼び出します...
jQuery ->
handler = Gmaps.build 'Google'
handler.buildMap {
provider: {
minZoom: 3
}, internal: {id: 'map'} }, ->
markers = handler.addMarkers( $('#map').data('events'),
draggable: false
flat: false
)
#moves map to marker clicked + open infowindow
$(document).on 'click', '#sideBar li', ->
markers[$(this).data('marker')].panTo()
markers[$(this).data('marker')].click()
そこの一番下にあるその関数...私がmarkers
配列にアクセスできる唯一の方法は、それがhandler.buildMap
関数内にあったためです。markers
では、変数はグローバルである必要がありますか? 他にどのように行動できますか?
また、handler
変数...どこでも利用できるように思えます。を手動で に入れようとし@hash
まし.addMarkers()
たが、ハンドラーはマーカーを作成しませんでした。